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,具备如下优点: 可以通过设置不同 ...
随机推荐
- POJ 3860 Fruit Weights(数学+最长路径 or 最短路径)
Description Have you ever thought about comparing the weight of fruits? That’s what you should do in ...
- android-ViewList的通用ViewHold
在写ViewList的时候要写Adapter的时候,经常大量的代码都是差不多的. 1 ViewHold 2 if(convertView ==null ){}else{} 3 setTag 4 FIn ...
- 从微软msdn阅读事件的使用
微软文章:如何:在 Windows 窗体应用程序中使用事件 地址:https://msdn.microsoft.com/zh-cn/library/0y0987sc.aspx 文章:C#事件的订阅与触 ...
- javascript实现自动切换焦点功能学习
当用户在表单中填写完当前字段后,能否自动将焦点跳转到下一个字段以方便用户输入? 为了增强易用性,加快数据输入的速度,可以在前一个文本框中的字符达到一定的设置的字符长度后(比如电话号码,身份证号等),用 ...
- lintcode-101-删除排序数组中的重复数字 II
101-删除排序数组中的重复数字 II 跟进"删除重复数字": 如果可以允许出现两次重复将如何处理? 样例 标签 数组 两根指针 脸书 思路 参照上一篇博客lintcode-100 ...
- javascript string对象方法replace
最简单的replace用法是: var str = 'aaaaa9876b0000'; str.replace(/a/g,'A'); 有时候我们希望只是在匹配的位置添加特定的字符: var str = ...
- C++——OOP面向对象理解
从Rob Pike 的 Google+上的一个推看到了一篇叫<Understanding Object Oriented Programming>的文章,我先把这篇文章简述一下,然后再说说 ...
- 【NOIP模拟赛】与非 乱搞
biubiu~~~ 正解是线段树维护真值表,但是我觉得对于这道题来说乱搞就够了....... 我们发现如果我们把每一个数都一开始取反就会发现对于最后结果来说 x=x^1,x nand x=x|x ,x ...
- share-Nothing原理
Share nothing理论在数据库设计和优化中的实践应用 首先介绍share nothing概念.最早接触它是在 DataBaseManagentSystem一书的并行数据库章节中. 并行数据库要 ...
- Codeforces Round #526 (Div. 2) E. The Fair Nut and Strings
E. The Fair Nut and Strings 题目链接:https://codeforces.com/contest/1084/problem/E 题意: 输入n,k,k代表一共有长度为n的 ...