一般情况下,我们需要摄像头进行读取图像,这里我们就需要了解读取摄像头的函数,以及读取视频的函数。
这里主要有两个函数:cv.VideoCapture(),cv.VideoWriter()
在获取图像时,首先要对函数cv.VideoCapture()进行实例化。它的参数可以是设备索引或视频文件的名称。设备号就是那个摄像头,查看设备号一般是使用函数cat 目录一般在/dev下面
实现代码如下:
import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
# ## 显示结果帧e
cv.imshow('frame', gray)
if cv.waitKey(1) == ord('q'):
break
## 完成所有操作后,释放捕获器
cap.release()
cv.destroyAllWindows() 上面例子是我调用的电脑摄像头。
从视频中读取图片,代码如下:
import numpy as np
import cv2 as cv
cap = cv.VideoCapture('vtest.avi')
while cap.isOpened():
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('frame', gray)
if cv.waitKey(1) == ord('q'):
break
cap.release()
cv.destroyAllWindows()
下面为视频保存例子:
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
# 定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
frame = cv.flip(frame, 0)
# 写翻转的框架
out.write(frame)
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
# 完成工作后释放所有内容
cap.release()
out.release()
cv.destroyAllWindows() 上面的几个代码就是OpenCV在读取摄像头和视频的例子
|