文章目录
- 0. 前言
- 1. 图像操作
- 1.1. 读写
- 1.2. 常用操作
- 2 . 视频操作
- 2.1. 读视频
- 2.2. 写视频
- 3. 展示窗口
- 3.1. 流水账
- 3.2. 应用
- 附录
- 关于如何查询Opencv-Python API
0. 前言
- 包含API
cv2.imread cv2.imwrite cv2.resize cv2.cvtColor cv2.VideoCapture cv2.VideoWriter cv2.namedWindow cv2.imshow cv2.waitKey cv2.destroyWindow
1. 图像操作
1.1. 读写
- 读:
cv2.imread(filename, mode) - 得到的是
numpy.ndarray 对象,数据类型为np.uint8 。 mode 指的是读取的模式,默认为cv2.IMREAD_COLOR 。- 如果原本图像与指定的mode不同,则会自动转换图像。
- 例如,原始图像为RGB,输入模式选择
cv2.IMREAD_GRAYSCALE ,则得到shape为(h, w)的灰度图。 - 例如,原始图像是灰度图,输入模式选择
cv2.IMREAD_COLOR ,则得到shape为(h, w, 3)的图像。
- 例如,原始图像为RGB,输入模式选择
- 具体选项可以查看官方文档
- 得到的是
- 写:
cv2.imwrite(filename, img[, params]) - params 指的是
ImwriteFlags ,输入的形式为[paramId_1, paramValue_1, paramId_2, paramValue_2, ...] ,具体参数可以查看官方文档。 - 实例:
cv2.imwrite('/path/to/target/image.jpg', img, [cv.IMWRITE_JPEG_QUALIRY, 100])
- params 指的是
1.2. 常用操作
- 获取像素点:
- cv2中图像通过
numpy.ndarray 表示,shape为(height, width[, channel]) 。 - 可以直接通过指定下标来获取对应的像素点取值。
- cv2中图像通过
- 设置图像尺寸:
cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) - 目标尺寸
dsize 的格式为(width, height) 。- 注意,与熟悉的
(height, width) 刚好相反。 - 如果为0则表示
- 注意,与熟悉的
fx/fy 分别表示x轴(宽度)/y轴(高度)的缩放比例。- 若指定了
dsize 则这两个参数无效。 - 默认为0,不进行额外缩放。
- 若指定了
interpolation 表示差值方法,默认为双线性插值。- 完整版可以查看官方文档
- 目标尺寸
- 颜色空间转换:
cv2.cvtColor - 画框:
- 写字:
2 . 视频操作
2.1. 读视频
- 主要就是对
cv2.VideoCapture 的操作。 - 定义:
cv.VideoCapture(index/filename/url[, apiPreference]) - 第一个参数可以是本机摄像头编号、本地文件名、url数据流。
- 第二个参数没细看,一般都不用,好像是用来指定后端类别,如ffmpeg。
- 获取各类属性:
cap.get() - 常用的如下,更多可以查看官方文档
- 也有对应的
cap.set() 来改变参数。
1 2 3 4 5 6 | cv2.CAP_PROP_POS_FRAMES // 下一次要处理的帧编号,从0开始计数 cv2.CAP_PROP_FRAME_COUNT // 总帧数 cv2.CAP_PROP_FRAME_WIDTH // 宽度 cv2.CAP_PROP_FRAME_HEIGHT // 高度 cv2.CAP_PROP_POS_FRAMES // 当前位置(在第几帧) cv2.CAP_PROP_FPS // FPS |
- 读取视频:
flag, frame = cap.read() - 释放资源:
cap.release() - 使用实例:
1 2 3 4 5 6 7 8 9 10 11 12 | cap = cv2.VideoCapture('/path/to/mp4') // 另一种方法 // cap = cv2.VideoCapture() // cap.open('/path/to/mp4') while True: flag, frame = cap.read() if not flag: break ... cap.release() |
2.2. 写视频
- 主要就是对
cv2.VideoWriter 的操作。 - 定义:
cv.VideoWriter(filename, fourcc, fps, frameSize[, isColor]) fourcc :指定编码器参数,通过cv2.VideoWriter_fourcc(*'XVID') 来定义。- 下面参考了这里
mp4v 对应mp4。I420 对应avi,未压缩的YUV颜色编码,4:2:0色度子采样,兼容性好,但文件较大。xvid 对应avi,MPEG-4编码类型,视频大小为平均值,MPEG4所需要的空间是MPEG1或M-JPEG的1/10,它对运动物体可以保证有良好的清晰度。flv1 对应flv,流媒体格式是一种新的视频格式,形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等缺点。
fps :指定帧率。frameSize :指定视频尺寸,结构是(w, h) 。
- 获取/设置属性:
writer.get/set - 主要包括了四个参数:
cv2.VIDEOWRITER_PROP_QUALITY cv2.VIDEOWRITER_PROP_FRAMEBYTES cv2.VIDEOWRITER_PROP_NSTRIPES cv2.VIDEOWRITER_PROP_IS_COLOR
- 具体请查看官方文档
- 主要包括了四个参数:
- 写数据:
writer.write(img) - 释放资源:
writer.release()
1 2 3 4 5 6 7 | writer = cv2.VideoWriter('./test.mp4', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), fps, size) // writer = cv2.VideoWriter('./test.mp4', -1, fps, size) ... while flag: ... writer.write(frame) writer.release() |
3. 展示窗口
- TODO
- 视频进度条
3.1. 流水账
cv2.namedWindow('Example', cv2.WINDOW_AUTOSIZE) - 构建窗口。
- 第一个参数是框的名称,第二个用于尺寸参数。
cv2.imshow('Example', img) - 在窗口中展示图片。
- 第一个参数用于选择定义过的
cv::namedWindow ,第二个参数是图像对象,即ndarray 对象。
cv2.waitKey(0) - 停留在当前画面的时间。
- 如果是0,则无限停留;如果是数字,则停留对应的毫秒。
- 返回值是按下按钮的ASCII码。
cv2.destroyWindow('Example') - 关闭窗口。
- 参数是窗口名称。
3.2. 应用
- 创建窗口,显示图片,按键结束,销毁窗口。
1 2 3 4 | cv2.namedWindow('Example', cv2.WINDOW_AUTOSIZE) cv2.imshow('Example', img) cv2.waitKey(0) cv2.destroyWindow('Example') |
附录
关于如何查询Opencv-Python API
-
首先明确,官方并没有给出cv2单独的文档,而是与C++ API放在一起,Python与C++的API相同。
-
在官网中打开打开
Modules 选项卡,然后在右上方Search中寻找自己需要的API。 -
以查询
cv2.VideoCapture 相关API为例- 首先,通过关键字查询对应的类,然后选择。
- 然后,查询相关的API,如果有
Python 关键字,说明就有对应的cv2 API。