最近在学习OpenCV的Python版本,是计算机视觉方面必须掌握的一个跨平台库,里面针对图形图像视频的处理方法有很多,为了避免遗忘和以后随用随查,记录分享在此。欢迎各位大佬指出不足之处!
该函数用于读取各种常见格式的图片,读取结果均为ndarray。对于单通道灰度图像即为二维矩阵,对于彩色3通道图像即为heigh*width*channels
的三维矩阵。应注意作为矩阵,第一个下标为行数,对应图片的高,第二个下标为列数,对应图片的宽。官方文档:https://docs.opencv.org/3.4.2/d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56
img = cv2.imread(filename[, flags])
该函数用于将读取到的图片色彩空间进行转换。注意OpenCV中的RGB彩色空间的通道顺序相反,顺序为BGR,故在使用matplotlib等库进行图像展示时,需要将图像转换至RGB彩色空间。官方文档:https://docs.opencv.org/3.4.2/d7/d1b/group__imgproc__misc.html#ga397ae87e1288a81d2363b61574eb8cab
dst = cv2.cvtColor(src, code)
该函数用于将图片展示到OpenCV的GUI窗口中。官方文档:https://docs.opencv.org/3.4.2/d7/dfc/group__highgui.html#ga453d42fe4cb60e5723281a89973ee563
cv2.imshow(winname, mat)
img = cv2.imread(r'.\image.jpg', cv2.IMREAD_COLOR)
cv2.imshow('show image', img)
# 应注意在展示图片后需要hold住程序,否则窗口也就一闪而过了
cv2.waitkey(0)
# 最后销毁一下窗口回收资源
cv2.destroyAllWindows()
该函数主要用于将处理后的图像保存至文件。官方文档:https://docs.opencv.org/3.4.2/d4/da8/group__imgcodecs.html#gabbc7ef1aa2edfaa87772f1202d67e0ce
retval = cv2.imwrite(filename, img[, params])
OpenCV中使用VideoCapture类作为视频的处理类,既可以从视频文件中读取视频流,也可以从摄像头设备中读取视频流。官方文档:https://docs.opencv.org/3.4.2/d8/dfe/classcv_1_1VideoCapture.html
该函数主要用于初始化VideoCapture视频处理类。
cap = cv2.VideoCapture(filename/index)
初始化的参数既可以是要打开的视频文件的路径(filename),也可以是摄像头设备的ID(index)。摄像头设备的ID默认从0开始。
建立VideoCapture后,可以通过该类中的get
函数获取视频流的各种信息。
retval = cv2.VideoCapture.get(propId)
可以通过该函数设置VideoCapture中视频流的各种属性。
retval = cv2.VideoCapture.set(propId, value)
可以通过该函数获取VideoCapture中视频流的下一帧。
retval, image = cv2.VideoCapture.read()
# 打开第一个摄像头设备
cap = cv2.VideoCapture(0)
# 根据FPS计算每一帧应该停留的时间
timeElapse = int(math.floor(1000/cap.get(cv2.CAP_PROP_FPS)))
# 创建窗口以备展示视频
cv2.namedWindow('Video Player', cv2.WINDOW_NORMAL)
while True:
ret, frame = cap.read()
if not ret:
print('Cannot Get Frame From Camera')
break
cv2.imshow("Video Player", frame)
if cv2.waitKey(timeElapse) == ord('q'):
break
# 释放资源
cv2.destroyAllWindows()
cap.release()