python--opencv模块
1.图片的读取与展示
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 # 接收两个参数,一个是文件名,一个值,如果值为1,接收的是彩色图片,如果值为零,接受的是灰度图片。会有一个返回值,表示返回的图片内容 img = cv2.imread('mashiro.jpg',1) # 接收两个参数,一个是窗体名称,另一个是要显示的内容 cv2.imshow('mashiro',img) # 将程序暂停,只有这样,才能看到图片,否则图片会一闪而过因为程序结束了,如果time.sleep()的话,会卡住 cv2.waitKey(0)
2. 图片写入
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 img = cv2.imread('mashiro.jpg',1) cv2.imwrite('mashiro1.jpg',img)
3.不同图片质量保存
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 img = cv2.imread('mashiro.jpg',1) cv2.imwrite('mashiro1.jpg',img,[cv2.IMWRITE_JPEG_QUALITY,0]) cv2.imwrite('mashiro2.png',img,[cv2.IMWRITE_PNG_COMPRESSION,0]) # jpg属于有损压缩,是以图片的清晰度为代价的,数字越小,压缩比越高,图片质量损失越严重 # png属于无损压缩,数字0-9,数字越低,压缩比越低
4.像素操作基础
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 img = cv2.imread('mashiro.jpg',1) (a,b,c) = img[500,500] print(a,b,c) for i in range(1,100): img[i,i] = (255,0,0) cv2.imshow('mashiro',img) cv2.waitKey(0)
5.图片缩放
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 img = cv2.imread('mashiro.jpg',1) cv2.imshow('mashiro',img) imginfo = img.shape height = imginfo[0] width = imginfo[1] mode = imginfo[2] print(imginfo) dstHeight = int(height*0.5) dstWidth = int(width*0.5) dst = cv2.resize(img,(dstWidth,dstHeight)) cv2.imshow('mashiro1',dst) cv2.waitKey(0)
6.图片缩放(源码实现)
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dstHeight = int(height/2) dstWidth = int(width/2) dstImage = np.zeros((dstHeight,dstWidth,3),np.uint8) for i in range(0,dstHeight): for j in range(0,dstWidth): iNew = int(i*(height*1.0/dstHeight)) jNew = int(j*(width*1.0/dstWidth)) dstImage[i,j] = img[iNew,jNew] cv2.imshow('mashiro',dstImage) cv2.waitKey(0)
7.图片剪切
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape dst = img[10:600,10:400] cv2.imshow('mashiro',dst) cv2.waitKey(0)
8.图片移位
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2,numpy as np img = cv2.imread('mashiro.jpg',1) cv2.imshow('mashiro',img) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] matshift = np.float32([[1,0,100],[0,1,200]]) dst = cv2.warpAffine(img,matshift,(height,width)) cv2.imshow('mashiro1',dst) cv2.waitKey(0)
9.图片移位(源码实现)
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape cv2.imshow('mashiro',img) dst = np.ones(imgInfo,np.uint8) height = imgInfo[0] width = imgInfo[1] for i in range(0,height): for j in range(0,width-300): dst[i,j] = img[i,j] cv2.imshow('mashiro1',dst) cv2.waitKey(0)
10.图片镜像
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape cv2.imshow('mashiro',img) dst = np.ones(imgInfo,np.uint8) height = imgInfo[0] width = imgInfo[1] for i in range(0,height): for j in range(0,width): dst[i,j] = img[height-1-i,j] cv2.imshow('mashiro1',dst) cv2.waitKey(0)
11.图片仿射变换
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) cv2.imshow('mashiro',img) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] matSrc = np.float32([[0,0],[0,height-1],[width-1,0]]) matDst = np.float32([[50,50],[300,height-200],[width-300,100]]) matAffine = cv2.getAffineTransform(matSrc,matDst) dst = cv2.warpAffine(img,matAffine,(width,height)) cv2.imshow('mashiro1',dst) cv2.waitKey(0)
12.图片旋转
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape cv2.imshow('mashiro',img) height = imgInfo[0] width = imgInfo[1] matRotate = cv2.getRotationMatrix2D((width*0.5,height*0.5),45,0.5) dst = cv2.warpAffine(img,matRotate,(width,height)) cv2.imshow('mashiro1',dst) cv2.waitKey(0)
13.闲的蛋疼(批量将图片进行上述操作)
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import glob import numpy as np all_jpg = glob.glob(r'C:\Users\Administrator\Desktop\satori\*.jpg') for count,jpg in enumerate(all_jpg): img = cv2.imread(jpg,1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dst = cv2.resize(img,(int(width/2),int(height/2))) cv2.imwrite(rf'C:\Users\Administrator\Desktop\satori\scale\{count}.jpg',dst,[cv2.IMWRITE_JPEG_QUALITY,100]) cv2.waitKey(0) ####################################### for count,jpg in enumerate(all_jpg): img = cv2.imread(jpg,1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] matshift = np.float32([[1,0,100],[0,1,50]]) dst = cv2.warpAffine(img,matshift,(width,height)) cv2.imwrite(rf'C:\Users\Administrator\Desktop\satori\translation\{count}.jpg',dst) cv2.waitKey(0) ############################ for count,jpg in enumerate(all_jpg): img = cv2.imread(jpg,1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dst = np.zeros(imgInfo,np.uint8) for i in range(0,height): for j in range(0,width): dst[i,j] = img[height-1-i,j] cv2.imwrite(rf'C:\Users\Administrator\Desktop\satori\flip\{count}.jpg',dst) ####################### for count,jpg in enumerate(all_jpg): img = cv2.imread(jpg,1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] matsrc = np.float32([[0,0],[0,height-1],[width-1,0]]) matdst = np.float32([[50,50],[int(width/2),int(height/2)],[width-100,height-50]]) matAffine = cv2.getAffineTransform(matsrc,matdst) dst = cv2.warpAffine(img,matAffine,(width,height)) cv2.imwrite(rf'C:\Users\Administrator\Desktop\satori\shear\{count}.jpg',dst) ######################## for count,jpg in enumerate(all_jpg): img = cv2.imread(jpg,1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] matRotate = cv2.getRotationMatrix2D((width*0.5,height*0.5),60,0.5) dst = cv2.warpAffine(img,matRotate,(width,height)) cv2.imwrite(rf'C:\Users\Administrator\Desktop\satori\rotation\{count}.jpg',dst)
14.灰度处理
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2,numpy as np img = cv2.imread('mashiro.jpg',0) cv2.imshow('mashiro',img) img = cv2.imread('b.png',1) dst = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) cv2.imshow('mmp',dst) cv2.waitKey(0) img =cv2.imread('mashiro.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dst = np.zeros((height,width,3),np.uint8) for i in range(0,height): for j in range(0,width): b,g,r = img[i,j] gray = (int(b)+int(g)+int(r))/3 dst[i,j] = [np.uint8(gray),np.uint8(gray),np.uint8(gray)] cv2.imshow('mmp',dst) cv2.waitKey(0) img =cv2.imread('mashiro.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dst = np.zeros((height,width,3),np.uint8) for i in range(0,height): for j in range(0,width): b,g,r = img[i,j] b = int(b) g = int(g) r = int(r) gray = r*0.9+b*0.87+r*0.4 dst[i,j] = [np.uint8(gray),np.uint8(gray),np.uint8(gray)] cv2.imshow('mashiro1',dst) cv2.waitKey(0)
15.颜色反转
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import numpy as np import cv2 img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) dst = np.zeros((height,width,1),np.uint8) for i in range(0,height): for j in range(0,width): dst[i,j] = 255 - gray[i,j] cv2.imshow('mashiro',gray) cv2.imshow('mashiro1',dst) cv2.waitKey(0) # img = cv2.imread('mashiro.jpg',1) # imgInfo = img.shape # height = imgInfo[0] # width = imgInfo[1] # #gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # # dst = np.zeros((height,width,3),np.uint8) # # for i in range(0,height): # for j in range(0,width): # b,g,r = img[i,j] # dst[i,j] = 255-b,255-g,255-r # # cv2.imshow('mashiro',img) # cv2.imshow('mashiro1',dst) # cv2.waitKey(0)
16.马赛克
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] for m in range(200,400): for n in range(100,200): if m%10==0 and n%10==0: for i in range(0,10): for j in range(0,10): b,g,r = img[m,n] img[i+m,j+n] = b,g,r cv2.imshow('mashiro',img) cv2.waitKey(0)
17.毛玻璃
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import numpy as np import cv2,random img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dst = np.zeros((height,width,3),np.uint8) mm = 8 for m in range(0,height-mm): for n in range(0,width-mm): index = int(random.random()*8) b,g,r = img[m+index,n+index] dst[m,n] = b,g,r cv2.imshow('mashiro',dst) cv2.waitKey(0)
18.真白18岁生日快乐
19.图片融合
import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) img1 = cv2.imread('mashiro.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] roiH = int(height/2) roiW = int(width/2) imgROI = img[0:roiH,0:roiW] img1ROI = img[0:roiH,0:roiW] dst = np.zeros((roiH,roiW,3),np.uint8) dst = cv2.addWeighted(imgROI,0.5,img1ROI,0.5,0) cv2.imshow('mashiro',dst) cv2.waitKey(0) # 貌似程序有问题
20.边缘检测
import cv2 import numpy as np import random # 所有边缘检测都是基于灰度处理的,因此先要转换成灰度图片 img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] cv2.imshow('mashiro',img) # 1 灰度 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 2 高斯滤波 imgG = cv2.GaussianBlur(gray,(3,3),0) # 图片经过卷积 dst = cv2.Canny(imgG,50,50) cv2.imshow('mashiro1',dst) cv2.waitKey(0)
21.浮雕效果
import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) cv2.imshow('mashiro',img) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) dst = np.zeros((height,width,1),np.uint8) for i in range(0,height): for j in range(0,width-1): grayP0 = int(gray[i,j]) grayP1 = int(gray[i,j+1]) newP = grayP0-grayP1+150 if newP>255: newP=255 elif newP<0: newP=0 dst[i,j] = newP cv2.imshow('mashiro1',dst) cv2.waitKey(0)
22.颜色映射
import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) cv2.imshow('mashiro',img) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dst = np.zeros((height,width,3),np.uint8) for m in range(height): for n in range(width): b,g,r = img[m,n] b = b*1.5 g = g*1.3 if b >255: b=255 if g>255: g=255 dst[m,n] = b,g,r cv2.imshow('mashiro1',dst) cv2.waitKey(0)
23.油画特效
import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) dst = np.zeros((height,width,3),np.uint8) for i in range(4,height-4): for j in range(4,width-4): array1 = np.zeros(8,np.uint8) for m in range(-4,4): for n in range(-4,4): p1=int(gray[i+m,j+n]/32) array1[p1]=array1[p1]+1 currentMax = array1[0] for k in range(0,8): if currentMax<array1[k]: l=k for m in range(-4,4): for n in range(-4,4): if gray[i+m,j+n]>(l*32) and gray[i+m,j+n]<((l+1)*32): b,g,r = img[m,n] dst[i,j] = b,g,r cv2.imshow('mashiro',dst) cv2.waitKey(0) # 程序算的会很慢很慢
24.线段绘制
import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) newImagInfo = (500,500,3) dst = np.zeros(newImagInfo,np.uint8) # 1.图片信息 2.开始位置 3.结束位置 4.颜色 cv2.line(dst,(100,100),(400,400),(0,0,255)) # 5.线条的宽度 cv2.line(dst,(100,200),(400,200),(0,255,255),20) # 6.线条类型 cv2.line(dst,(100,300),(400,300),(0,255,0),20,cv2.LINE_AA) # 绘制三角形,说白了就是三条线段 cv2.line(dst,(200,150),(50,250),(25,100,255)) # 第二条线段的起始位置是第一条线段的终止位置 cv2.line(dst,(50,250),(400,380),(25,100,255)) # 第三条线段的起始位置是第一条线段的起始位置,终止位置是第二条线段的终止位置 cv2.line(dst,(200,150),(400,380),(25,100,255)) cv2.imshow('mashiro',dst) cv2.waitKey(0)
25.矩形圆形任意多边形绘制
import cv2 import numpy as np newImgInfo = 500,500,3 dst = np.zeros(newImgInfo,np.uint8) # 1.图片 2.左上角坐标 3.右下角坐标 4.颜色 5.是否填充(大于零:线条宽度,小于零:是否填充) cv2.rectangle(dst,(50,100),(200,300),(255,0,0),-1) # 1.图片 2.圆心 3.半径 4.颜色 cv2.circle(dst,(250,250),(50),(255,0,255),-1,cv2.LINE_AA) # 椭圆 1.图片 2.椭圆圆心 3.长轴和短轴的长度 4.偏转角度 5.圆弧起始角度 6.圆弧终止角度 7.颜色 8.是否填充 cv2.ellipse(dst,(256,256),(150,100),0,0,180,(255,255,0),-1,cv2.LINE_AA) # 定义任意角度 points = np.array([[150,50],[140,140],[200,170],[250,250],[150,50]],np.int32) # (5,2) points = points.reshape((-1,1,2)) # (5,1,2) cv2.polylines(dst,[points],True,(0,255,255)) cv2.imshow('mashiro',dst) cv2.waitKey(0)
26.文字绘制
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) font = cv2.FONT_HERSHEY_COMPLEX # 1.图片 2.文字的内容 3.写入的坐标 4.字体 5.字体大小 6.颜色 7,字体的粗细 8.线条类型 cv2.putText(img,'hello, i am mashiro····',(100,300),font,1,(200,100,255),2,cv2.LINE_AA) cv2.imshow('mashiro',img) cv2.waitKey(0)
27.图片绘制
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 img = cv2.imread('mashiro.jpg',1) height = int(img.shape[0]*0.2) width = int(img.shape[1]*0.2) imgResize = cv2.resize(img,(width,height)) for i in range(height): for j in range(width): img[i+200,j+350] = imgResize[i,j] cv2.imshow('mashiro',img) cv2.waitKey(0)
28.彩色图片直方图
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np def ImageHist(img,e_type): color = (255,255,255) windowName = 'gray' if e_type == 31: color = (255,0,0) windowName = 'b hist' elif e_type == 32: color = (0,255,0) windowName = 'g hist' elif e_type == 33: color = (0,0,255) windowName = 'r hist' # 一定要用列表的形式 1.图片 2.计算直方图的通道 3.蒙版mask 4.直方图的size,多少种 5直方图中各个像素的值 hist = cv2.calcHist([img],[0],None,[256],[0.0,255.0]) minV,maxV,minV_indice,maxL_indice = cv2.minMaxLoc(hist) histImg = np.zeros([256,256,3],np.uint8) for h in range(256): interNomal = int(hist[h]*256/maxV) cv2.line(histImg,(h,256),(h,256-interNomal),color) cv2.imshow(windowName,histImg) return histImg img = cv2.imread('mashiro.jpg',3) channels = cv2.split(img) # RGB ---->R G B for i in range(3): ImageHist(channels[i],31+i) cv2.waitKey(0)
29.灰度直方图均衡化
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) cv2.imshow('mashiro',gray) dst = cv2.equalizeHist(gray) cv2.imshow('mashiro1',dst) cv2.waitKey(0)
30.彩色直方图均衡化
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',3) cv2.imshow('mashiro',img) b,g,r = cv2.split(img) # split之后 得到三个通道的数据 bH = cv2.equalizeHist(b) gH = cv2.equalizeHist(g) rH = cv2.equalizeHist(r) result = cv2.merge((bH,gH,rH)) # 将三个通道合成在一起 cv2.imshow('mashiro1',result) cv2.waitKey(0)
31.YUV直方图均衡化
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) imgYUV = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb) cv2.imshow('mashiro',img) channelYUV = cv2.split(imgYUV) channelYUV[0] = cv2.equalizeHist(channelYUV[0]) channels = cv2.merge(channelYUV) result = cv2.cvtColor(channels,cv2.COLOR_YCrCb2BGR) cv2.imshow('mashiro1',result) cv2.waitKey(0)
32.图片修补
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) for i in range(200,300): img[i,200] = (255,255,255) img[i,200+1] = (255,255,255) img[i,200-1] = (255,255,255) for i in range(150,250): img[250,i] = (255,255,255) img[250+1,i] = (255,255,255) img[250-1,i] = (255,255,255) cv2.imwrite('damaged_mashiro.jpg',img) img = cv2.imread('damaged_mashiro.jpg',3) cv2.imshow('damaged_mashiro.jpg',img) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] paint = np.zeros((height,width,1),np.uint8) for i in range(200,300): paint[i,200] = 255 paint[i,200+1] = 255 paint[i,200-1] = 255 for i in range(150,250): paint[250,i] = 255, paint[250+1,i] = 255 paint[250-1,i] = 255 cv2.imshow('paint',paint) imgDst = cv2.inpaint(img,paint,3,cv2.INPAINT_TELEA) cv2.imshow('mashiro',imgDst) cv2.waitKey(0)
33.亮度增强
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dst = np.zeros((height,width,3),np.uint8) # 新图片像素的亮度等于原图片像素的亮度加上一个固定值 cv2.imshow('mashiro',img) for i in range(height): for j in range(width): (b,g,r) = img[i,j] bb = int(b)+120 # 自由变换 gg = int(g)+120 rr = int(r)+120 if bb > 255: bb = 255 if gg > 255: gg = 255 if rr > 255: rr = 255 dst[i,j] = img[i,j] cv2.imshow('mashiro1',dst) cv2.waitKey(0)
34.磨皮美白
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat # 原理:双边滤波 import cv2 img = cv2.imread('mashiro.jpg',1) cv2.imshow('mashiro',img) dst = cv2.bilateralFilter(img,15,35,35) cv2.imshow('mashiro1',dst) cv2.waitKey(0) # 由于是动漫图片,然鹅并看不出什么效果
35.高斯滤波
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 img = cv2.imread('mashiro.jpg',1) cv2.imshow('mashiro',img) dst = cv2.GaussianBlur(img,(5,5),1.5) cv2.imshow('mashiro1',dst) cv2.waitKey(0) # 如果原图上有许多的小点点,那么高斯滤波可以过滤掉,同时图片也会变得模糊
36.均值滤波
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg',1) cv2.imshow('mashiro',img) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dst = np.zeros((height,width,3),np.uint8) for i in range(3,height-3): for j in range(3,width-3): sum_b = int(0) sum_g = int(0) sum_r = int(0) for m in range(-3,3): for n in range(-3,3): b,g,r = img[i+m,j+n] sum_b = sum_b + int(b) sum_g = sum_g + int(g) sum_r = sum_r + int(r) b = np.uint8(sum_b/36) g = np.uint8(sum_g/36) r = np.uint8(sum_r/36) dst[i,j] = b,g,r cv2.imshow('mashiro1',dst) cv2.waitKey(0) # 然而并无卵用,程序还很慢
37.中值滤波
#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 import numpy as np img = cv2.imread('mashiro.jpg', 1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow('mashiro', img) dst = np.zeros((height, width, 3), np.uint8) collect = np.zeros(9, np.uint8) for i in range(1, height-1): for j in range(1, width-1): k = 0 for m in range(-1, 2): for n in range(-1, 2): gray = img[i + m, j + n] collect[k] = gray k = k + 1 for k in range(0, 9): p1 = collect[k] for t in range(k + 1, 9): if p1 < collect[t]: mid = collect[t] collect[t] = p1 p1 = mid dst[i, j] = collect[4] cv2.imshow('mashiro1',dst) cv2.waitKey(0) # 效果并不理想,程序也很慢
38.视频分解成图片
# 视频分解图片 # 1 load 2 info 3 parse 4 imshow imwrite import cv2 # 打开一个视频获取,一个句柄 cap = cv2.VideoCapture(r"01.mp4") # 判断是否打开 isOpened = cap.isOpened print(isOpened) # 获取视频的帧率 fps = cap.get(cv2.CAP_PROP_FPS) # 获取图片的宽度和高度 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) print("帧率=%s,宽度=%s,高度=%s" % (fps, width, height)) i = 0 while isOpened: if i == 100: break # 我们只获取100张图片 else: i += 1 # 读取每一张flag,frame # flag表示是否读取成功 # frame表示图片的内容 (flag, frame) = cap.read() fileName = "image"+str(i)+".jpg" print(fileName) if flag: cv2.imwrite(fileName, frame, [cv2.IMWRITE_JPEG_QUALITY, 100]) # 表示精度最高 print("end!!!") # 程序运行结果 ''' <built-in method isOpened of cv2.VideoCapture object at 0x04F90630> 帧率=15.0,宽度=1280,高度=720 image1.jpg image2.jpg image3.jpg image4.jpg image5.jpg image6.jpg image7.jpg image8.jpg image9.jpg image10.jpg image11.jpg image12.jpg image13.jpg image14.jpg image15.jpg image16.jpg image17.jpg image18.jpg image19.jpg image20.jpg image21.jpg image22.jpg image23.jpg image24.jpg image25.jpg image26.jpg image27.jpg image28.jpg image29.jpg image30.jpg image31.jpg image32.jpg image33.jpg image34.jpg image35.jpg image36.jpg image37.jpg image38.jpg image39.jpg image40.jpg image41.jpg image42.jpg image43.jpg image44.jpg image45.jpg image46.jpg image47.jpg image48.jpg image49.jpg image50.jpg image51.jpg image52.jpg image53.jpg image54.jpg image55.jpg image56.jpg image57.jpg image58.jpg image59.jpg image60.jpg image61.jpg image62.jpg image63.jpg image64.jpg image65.jpg image66.jpg image67.jpg image68.jpg image69.jpg image70.jpg image71.jpg image72.jpg image73.jpg image74.jpg image75.jpg image76.jpg image77.jpg image78.jpg image79.jpg image80.jpg image81.jpg image82.jpg image83.jpg image84.jpg image85.jpg image86.jpg image87.jpg image88.jpg image89.jpg image90.jpg image91.jpg image92.jpg image93.jpg image94.jpg image95.jpg image96.jpg image97.jpg image98.jpg image99.jpg image100.jpg end!!! '''
python--opencv模块的更多相关文章
- 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台
搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...
- RPi 2B python opencv camera demo example
/************************************************************************************** * RPi 2B pyt ...
- 利用Anaconda软件安装opencv模块
先说明我安装opencv环境的原因:因为我Anaconda中创建了tensorflow和pytorch虚拟环境,想在每个虚拟环境下都安装opencv模块,这样在后期进行代码调试的时候更加便捷,以下是我 ...
- Python opencv提取视频中的图片
作者:R语言和Python学堂链接:https://www.jianshu.com/p/e3c04d4fb5f3 这个函数就是本文要介绍的video2frames()函数,功能就是从视频中提取图片,名 ...
- 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化
一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...
- [Python]-opencv-python模块(cv2)-图片读取和格式转换
python常常用opencv模块来处理图像. import cv2 as cv 读取图片:imread() 默认按照彩色三通道读取: img = cv2.imread(path) 读取灰度图: im ...
- Python标准模块--threading
1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...
- Python的模块引用和查找路径
模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...
- Python Logging模块的简单使用
前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...
- Python标准模块--logging
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
随机推荐
- LSTM调参经验
0.开始训练之前先要做些什么? 在开始调参之前,需要确定方向,所谓方向就是确定了之后,在调参过程中不再更改 1.根据任务需求,结合数据,确定网络结构. 例如对于RNN而言,你的数据是变长还是非变长:输 ...
- 简单理解DES加密算法
数据加密标准(Data Encryption Standard,DES)是当前使用最广泛的加密体制,对于任意的加密方案,总有两个输入:明文和密钥. 明文是64bits,密钥是56bits 加密过程就是 ...
- 自定义Json格式
老铁们都知道,一般的json格式就是键值对格式,在一些特定的框架或者系统中,会用到自定义格式的json文件,假设我们要得到的特定格式json格式如下: {"A":"2&q ...
- incorrect integer value for column 问题解决
最近在用zend框架,然后装了一个项目,发现注册的时候出现 General error: 1366 Incorrect integer value: '' for column 'user_id' a ...
- 关于C标准
关于C标准 1. 前言 本文从英文 C-FAQ (2004 年 7 月 3 日修订版) 翻译而来.本文的 中文版权为朱群英和孙云所有. 本文的内容可以自由用于个人目的,但 是不可以未经许可出版发行. ...
- ES 1.7安装ik分词elasticsearch-analysis-ik-1.2.5中文同义词实现
ElasticSearch 中文同义词实现 https://blog.csdn.net/xsdxs/article/details/52806499 参考以下两个网址,但运行报错,以下是我自己改进方式 ...
- [洛谷P2839][国家集训队]middle
题目大意:给你一个长度为$n$的序列$s$.$Q$个询问,问在$s$中的左端点在$[a,b]$之间,右端点在$[c,d]$之间的子段中,最大的中位数. 强制在线. 题解:区间中位数?二分答案,如果询问 ...
- 12.25模拟赛T3
可以发现,答案O(根号)(因为链上答案最大,n/2,n/3...根号种) 每次求答案要二分 优秀的做法是: 对于小于根号n的暴力nlogn找,可能二分到同一个mid,记忆化一下最小的tot值 对于大于 ...
- OpenJudge百炼-2747-数字方格-C语言-枚举
描述:如上图,有3个方格,每个方格里面都有一个整数a1,a2,a3.已知0 <= a1, a2, a3 <= n,而且a1 + a2是2的倍数,a2 + a3是3的倍数, a1 + a2 ...
- 从零开始学习MXnet(五)MXnet的黑科技之显存节省大法
写完发现名字有点拗口..- -# 大家在做deep learning的时候,应该都遇到过显存不够用,然后不得不去痛苦的减去batchszie,或者砍自己的网络结构呢? 最后跑出来的效果不尽如人意,总觉 ...