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,具备如下优点: 可以通过设置不同 ...
随机推荐
- 无法注册DLL/OCX:regsvr32 failed with exit code 0x5
最近在服务器上装一个等值线控件,确报错: RegSvr32 failed with exit code 0x5 尝试解决方法1: 在cmd下 运行for %1 in (%windir%\syste ...
- lintcode-45-最大子数组差
45-最大子数组差 给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大. 返回这个最大的差值. 注意事项 子数组最少包含一个数 样例 给出 ...
- 第四次JAVA作业
public class TvbDog { public static void main(String[] args) { Dog per=new Dog("陈狗"," ...
- javascript 数组以及对象的深拷贝
如果 let arr2 = arr1: 那么只是赋值的引用,改变arr2也会相应的改变arr1: 如果 let arr2 = [].concat(arr1): 如果arr1里面不是引用类型,那么ar ...
- Delphi 检查文件是否存在
Delphi下检查文件是否存在,我们可以使用FileExists函数 其原形如下: Function FileExists(const FileName: string): Boolean; 示例: ...
- maven release版本重复上传error
A couple things I can think of: user credentials are wrong url to server is wrong user does not have ...
- [IOI2007 D1T1]Miners 矿工配餐
题目大意:有$2$个煤矿,$n$天.每天给一个煤矿送餐(共有有$3$种餐),价值为它与前面两次送餐(如果有的话)不同的种类数.最大化价值. 题解:看到只有三种餐,考虑状压$DP$.$f_{i,j,k, ...
- 2014end
人.事.物. 人一年了,从十六班到十六班,从j101到j101再到A207. 她:结婚,然后走了.就是这样,干脆得我都来不及留恋.是的,再也听不到她那很温柔语气,看不到她偶尔激动时就踮起脚尖.还记得晚 ...
- Mybatis缓存机制及mybatis的各个组成部分
Mybatis 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 ...
- 雪碧图background-position的rem用法
background的雪碧图配合rem就正常写即可,要加上background-size,大小为sprites的原图尺寸,宽高为一帧的尺寸.例如: .player{ width: 2.32rem; / ...