简介
OpeanCV是一个开源的计算机视觉和机器学习软件库。它由一系列的C函数和少量C++类构成,同时提供Python、Java和MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。在此将从基础功能开始介绍OpeanCV。
图片的读取与显示
a=cv2.imread('E:\cat.jpg')#图片读取
cv2.imshow('wjm',a)#显示图片
cv2.waitKey(1000)#显示时间
cv2.destroyAllWindows()#关闭窗口
我们指定一个变量a,调用opeancv库下的imread函数加入我们的图像绝对位置完成图像文件的读取,调用cv2.imshow引号内填入要显示窗口的名称这里建议不要使用中文,后面是文件的名称。cv2.waitKey是显示的时间这里的单位是ms,若设置为0则不会推出按下ESC才会结束程序。
运行展示
又是我们想要显示的图片窗口太大,这时我们就需要调用cv2.resize来修改图片的大小,需要设置的内容由文件的名称,以及修改后尺寸的大小,这里的大小单位是像素,第一个是宽第二个是高,下面展示效果
视频文件的读取与显示
在OpeanCV中同样可以读取视频文件,这里用到了cv2.VideoCapture(' ')引号内是文件的路径。下面根据完整的读取代码进行分析
import cv2
import numpy as np
vc= cv2.VideoCapture('E:/1.mp4')#捕捉视频文件
if vc.isOpened():#判断视频是否正确打开
ret,frame=vc.read()#读取第一帧的画面
while ret: #每次读取到的是一帧的画面所以使用while循环来不断的读取
ret,frame=vc.read() #获取画面
if frame is None: #获取失败后就退出,如视频播放完成时
break
if ret ==True: #获取成功
cv2.imshow('1',frame) #显示这一帧的画面
if cv2.waitKey(10)==27: #等待时间内若按下ESC键就退出,这里的27就是ESC的Ascii码
break
vc.release() #释放捕捉器
cv2.destroyAllWindows() #退出
这里对ret,frame=vc.read()单独说明,ret返回的是True或者False用于判断是否读取到了画面。frame是读取到的一帧的画面。
我们可以看到处理视频文件其实也是在处理图片,所以会处理图片,视频处理就是差不多了。
区域感兴趣
所谓区域感兴趣就是截取输入的图片指定的部分直接展示代码与效果
这里需要注意我们截取的范围必须时小于图片大小的,这里‘ : ’两边表示的时从多少像素到多少像素,如果我们省略一部分不写如‘ : 200’表示从0像素到200像素。若省去后面的部分这是一直到图片的最大值,其实冒号右边我们是可以大于真实范围的,显示的效果与最大值相同,但是冒号左边不能。
import cv2
import numpy as np
a=cv2.imread('E:\cat.jpg')
a=cv2.resize(a,(400,400))
b=a[150:300,100:300] #截取想要的区域
cv2.imshow('wjm',b)
cv2.waitKey(000)
cv2.destroyAllWindows()
读取灰度图
在图像处理中我们经常需要处理灰度图,这里提供两种读取灰度图的方法
#方法一:在以读取的文件基础上读取灰度图
b=cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)
#方法二:直接读取灰度图
c=cv2.imread('car.jpg',cv2.IMREAD_GRAYSCALE)
图片打码
这里图片打码的原理就是在指定范围内生成不同的颜色的像素点
a[:100,:200]=np.random.randint(0,256,(100,200,3))
#等号左边是我们要打码的范围,右边我们调用了np.random.randint(),作用是在随机生成0~255以内的数(颜色的范围就是0~255),范围是(100,200)
图片修改
从上面的图片打码我们可以看出对于颜色的控制就是修改像素点的颜色值所以我们也可以借此对颜色修改
由此我们也可以进行另一种操作将图片的一部分替换成另一张图片的一部分,效果如下
这里我们仍然需要注意选取的范围必须合法范围,其次是替换的区域大小是相同的。
图像加权
图像加权起到的作用就是在一张图片中隐约显示另一张图片,这里我们必须要求图像的大小是相等的。
import cv2
import numpy as np
a=cv2.imread('cat.jpg')
b=cv2.imread('qiu.jpg')
a=cv2.resize(a,(400,400))
b=cv2.resize(b,(400,400))
c=cv2.addWeighted(a,0.7,b,0.3,10)
#a图片占0.7,b图片占0.3,偏置值为10
cv2.imshow('wjma',c)
cv2.waitKey(000)
cv2.destroyAllWindows()
结束语
以一句文言结束今天的内容:锲而舍之,朽木不折;锲而不舍,金石可镂。《 荀子·劝学 》
一起努力奋斗!!!