@[TOC]
图像的相关操作
需要注意的是,OpenCV读入图像的顺序是g、b、r
的顺序,而像matplotlib这样的图像库读入图像的顺序是正常的r、g、b
,所以如果想要用opencv读取图像而用matplotlib.plotlib
显示时,就需要考虑一个通道翻转的问题。详情参见Stack Overflow上的讨论。
1.读取图片代码
1 | def openCV_image_ops(): |
遇到的问题
- b, g, r = cv2.split(img) ValueError: not enough values to unpack (expected 3, got 0)
出现这个问题我后,我查看了一下split相关代码,我寻思img的确是个3维的序列呀?但是报错说里面是空的,原来是读取的图片文件名写错了。。。 cv2.imread(“bear.jpg”)之前写成了 cv2.imread(“bear.png”),OpenCV在读取不到指定的文件时是不会报错的!!!
视频的相关操作
视频就是一系列的连续帧(frame by frame),OpenCV中视频的操作有2种,①获取摄像头的实时操作 ②直接操作视频。以上两种操作都通过一个VideoCapture对象
来管理,传入摄像头设备索引/视频文件名作为该对象的构造函数参数即可。
1.读取播放视频代码
1 | def openCV_video_ops(): |
如果想要用摄像头记录视频并保存,需要多做一些额外的工作,具体来说,需要考虑视频的FourCC编码
,这个可以百度一下,还有就是要指定保存视频的fps、每帧的宽度和高度、以及是否保存成彩色。
2.打开摄像头并保存视频代码
1 | def openCV_camera_save(): |
画图的相关操作
画图的机制是,先设置一个底板,然后在底板上画出响应的图形,具体的参加>>官方文档<<,总体来说,和其他语言中的绘图部分差不多,下面我测试了几个画图函数,并且我用OpenCV中提供的椭圆、圆、文字绘制函数画出了OpenCV的logo。
1.画图函数测试
1 | def openCV_drawing_ops(): |
2.画OpenCV-LOGO
就是3个同心圆环,再加上字体,注意,三个圈中间是个等边三角形
1 | def draw_openCV_logo(): |
遇到的问题
- OpenCV窗口的标题栏,如果用中文会乱码,因为OpenCV中用的是gbk,python中是utf-8,目前好像还没有好的解决办法,改成英文吧。。。