OpenCV 第2篇
Open处理视频
打开摄像头
要使用摄像头,需要使用cv2.VideoCapture(0)
创建VideoCapture对象,参数0指的是摄像头的编号,如果电脑有两个摄像头的话访问第二个摄像头就传入1,以此类推。1
2
3
4
5
6
7
8
9
10
11
12
13# 打开摄像头并灰度化显示
import cv2
capture=cv2.VideoCapture(0)
while(True):
# 获取一帧
ret,frame=capture.read()
# 将这帧转为灰度图
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1)==ord('q'):
break
capture.release()
cv2.destoryAllWindows()
capture.read()函数返回的第一个参数ret(return value)是一个布尔值,表示当前这一帧是否获取正确。cv2.cvtColor()用来转换颜色,这里将彩色图转为灰度图。
另外,通过cap.get(propid)可以获取摄像头的一些属性,比如捕获的分辨率、亮度和对比度等。propid是从0~18的数字,代表不同的属性。更多的属性参考VideoCaptureProperties
也可以使用cap.set(propId,value)来修改属性值。1
2
3
4
5
6# 获取捕获的分辨率
# propId可以直接写数字 也可以用OpenCV的符号表示
width,height=capture.get(3),capture.get(4)
# 以原分辨率的一倍来捕获
capture.set(cv2.CAP_PROP_FRAME_WIDTH,width*2)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT,height*2)
某些摄像头设定分辨率等参数时会无效,因为它有固定的分辨率大小支持,一般可在摄像头的资料页中找到
播放本地视频
把摄像头的编号换成视频的路径就可以播放本地视频了。cv2.waitKey(),它的参数表示暂停时间,所以这个值越大,视频播放速度越慢,反之,播放速度越快,通常设置为25或30。1
2
3
4
5
6
7
8# 播放本地视频
capture=cv2.VideoCapture('demo.mp4')
while(capture.isOpened()):
ret,frame=capture.read()
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GAY)
cv2.imshow('frame',gray)
if cv2.waitKey(30)==ord('q'):
break
录制视频
保存图片是cv2.imwrite(),保存视频需要创建一个VideoWriter的对象,需要传入四个参数:
- 输出文件名
- 编码方式FourCC码
- 帧率FPS
- 要保存的分辨率大小
FourCC是用来指定视频编码方式的四字节码,所有的编码可参考Video Codes。如MJPG编码写法如下:1
2
3cv2.VideoWriter_fourcc(*'MJPG')
# 或
cv2.VideoWriter_fourcc('M','J','P','G')
1 | capture=cv2.VideoCapture(0) |
图像基本操作
获取和修改像素点值
读入一张图片1
2import cv2
img=cv2.imread('test.jpg')
通过行列的坐标来获取某像素点的值,对于彩色图像,结果是B,G,R三个值得列表,对于灰度图或单通道图,只有一个值:1
2px=img[100,90]
print(px) # [103 98 197]