1、学习目的
使用OpenCV(cv2)在Python中显示网络摄像头
(1)使用OpenCV从Camera捕获图像并显示图像
(2)使用Opencv python在视频流中逐帧处理视频图像。
2、使用的函数:
cv.VideoCapture()
cv.VideoWriter()
cv.CAP_PROP_FRAME_WIDTH:视频流中帧的宽度。
cv.CAP_PROP_FRAME_HEIGHT:视频流中帧的高度。
OpenCV加载的彩色图像处于BGR模式。但Matplotlib以RGB模式显示。
3、程序
import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(* ' XVID ')
outport= cv2.VideoWriter(' output.avi ',fourcc,20.0,(640,480))
print(cap.isOpened())
while(cap.isOpened()):
ret,frame = cap.read()
if ret == True:
print(cap.get(CV2.CAP_PROP_FRAME_WIDTH))
print(cap.get(CV2.CAP_PROP_FRAME_HEIGHT))
out.write(frame)
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow(' frame ',gray)
if cv2.waitKey(1)& 0x FF == ord(' q '):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()
cap = cv2.VideoCapture(0)
参数
0 为默认计算机默认摄像头
1 可以更换来源
参数可以是设备索引或视频文件的名称
(2)保存视频
cv2.VideoWriter(‘输出文件名’,指定FourCC代码,应传递每秒帧数(fps)和帧大小,isColor标志)
FourCC:一个4字节代码,用于指定视频编解码器
编解码器:
在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2。
XVID更为可取.
MJPG会产生高大小的视频.
X264可以提供非常小的视频
在Windows中:DIVX(更多要测试和添加)
程序例子:
fourcc = cv2.VideoWriter_fourcc(* ' XVID ')
设置FourCC格式时,程序里采用了cv2.VideoWriter_fourcc()这个函数,若运行程序的时候显示这个函数不存在,可以改用了cv2.cv.CV_FOURCC这个函数
isColor标志:
如果是True,则编码器需要彩色帧,否则它适用于灰度帧
程序中的例子
cv2.VideoWriter(' output.avi ',fourcc,20.0,(640,480))
(3)检查视频cap是否已初始化
cap.isOpened()
如果没有,使用cap.open()打开它。
cap.open()
(4)
cap.read()
返回值:bool(True / False)
True:正确读取帧
通过检查此返回值来检查视频的结尾。
(5)访问此视频的某些功能
cap.get(propId)
propId:是0到18之间的数字。
每个数字表示视频的属性(如果它适用于该视频)
(6)颜色空间转换
cv2.cvtColor(input_image,flag)
flag :转换类型。
BGR↔Gray的转换:cv2.COLOR_BGR2GRAY
BGR↔HSV的转换:cv2.COLOR_BGR2HSV
视频捕获属性
https://docs.opencv.org/4.0.0/d4/d15/…
代码列表可在fourcc.org中找到
http://www.fourcc.org/codecs.php