电气人学opencv Day1(图片与视频的读取及可能出现的问题)
在学习opencv之前,首先应该选择语言。在我的认知里c++与python是最合适的两种,由于个人的学习原因选择了python,所以以下所有的程序都是python实现,但其实c++也是大同小异。
python中opencv的安装
python编译器我选择了实用性较强的pycharm,这个直接在官网上下载社区版就行了,足够学习使用。
库的安装推荐anaconda,在这里面可以搭建自己的环境,并在相应环境中下载自己所需的库,很是方便,下载同样只需要百度搜素就行,但可能比较慢。
打开后在not installed里面搜索opencv,点击下载就行。
(也不知道创始人啥爱好,anaconda和python都是蟒蛇的意思)
这里建议除了安装opencv外还应安装numpy
读取图片
1.在导入opencv的时候实际上应该是:
import cv2
这里的 ‘2’ 并非代表版本,而是表示我们的opencv是基于c++ API,为了保持向后兼容性才这么命名。
2.导入之后我们就可以使用opencv的许多自带函数实现一些内容了,这里的图像导入就有相应的函数:
img = cv.imread(filename, flags )
filename指的是导入图片的地址,推荐使用绝对路径(在图片——属性——安全里可以找到)
但复制得到的地址大都是单右线,比如这样:C:\Users\1\PycharmProjects\text\1.jpg
但这样就容易出问题:
原因是单右线与某些字母组合可能会被误识别成某些特殊意义的符号,所以我们这里可以把所有的单右线改成双右线或者左线,比如我这样:
(按理说直接读取文件名也没有问题,比如1.jpg,可一旦有重名的就会报错,所以稳妥起见我还是用的路径)
flag表示读取图像的方式,在文档中有:
不填flag时就直接读取原图像
3.读取图像后应该先创建窗口再显示图像,同样,都有相应的函数:
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
image表示窗口名称,后面的参数可以让你自由调节窗口大小
cv2.imshow('image', img)
注意显示函数’ '里面的名臣一定要与创建的窗口名称一致,后面是图片
4.最后不要忘了加上等待函数,不然图片将会一闪而逝
cv2.waitKey(0)
这里参数为0表示按任意键停止等待,若为1000则表示图片
释放窗口是个好习惯
cv2.destroyAllWindows()
5.完整代码如下:
import cv2
import numpy as np
img = cv2.imread('C:\\Users\\1\\PycharmProjects\\text\\1.jpg')
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', img)
cv2.waitKey(0)
cv.destroyAllWindows()
读取视频
其实读取视频的思路与图片类似,因为视频实质上就是一帧一帧的图片,所以我们需要先读取视频:
cap = cv2.VideoCapture('1.mp4')
再对每一帧图像进行上述处理就行了,这里同样有一些可以直接用的函数,可以去参考文档2中了解一下
完整代码:
import cv2
cap = cv2.VideoCapture('C:\\Users\\1\\PycharmProjects\\text\\2.mp4')
while(True):
ret, frame = cap.read()
cv2.namedWindow('frame', 0)
cv2.imshow('frame', frame)
if cv2.waitKey(0) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
ret是表示cap.read函数是否有返回的布尔值,注意必须有两个参数,不然会报错。这个函数的作用其实就是读取每一帧图像。
后面的if语句表示如果按键值等于’q’的ASCII值时,退出while循环