OpenCV打开摄像头或视频

文章目录

1. 视频读取流程

创建视频对象

python 复制代码
cap = cv2.VideoCapture(videoPath)  #加载视频
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)  #打开摄像头0

设置摄像头参数

使用值设置

python 复制代码
cap.set(3, 2560)    # 640 1280 1920  2560# 宽
# cap.set(4, 720)   # 720  1080  # 高
# cap.set(5, 60)    # 帧数
# cap.set(10, 150)  # 亮度
# cap.set(14, 150)  # 增益
# cap.set(11, 90)   # 对比度
# cap.set(15, 150)  # 曝光

使用参数设置

python 复制代码
capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//宽度
capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960);//高度
capture.set(CV_CAP_PROP_FPS, 30);//帧率 帧/秒
capture.set(CV_CAP_PROP_BRIGHTNESS, 1);//亮度 1
capture.set(CV_CAP_PROP_CONTRAST,40);//对比度 40
capture.set(CV_CAP_PROP_SATURATION, 50);//饱和度 50
capture.set(CV_CAP_PROP_HUE, 50);//色调 50
capture.set(CV_CAP_PROP_EXPOSURE, 50);//曝光 50

相应参数、对应的值及功能:

循环检查是否初始化成功并读取

python 复制代码
while(cap.isOpened()):  # 循环读取每一帧

读取视频

python 复制代码
ret, frame = cap.read()

释放摄像头

python 复制代码
cap.release()  

删除建立的全部窗口

python 复制代码
cv2.destroyAllWindows()  
python 复制代码
# 使用cv2.CAP_DSHOW后大小为640
cap.set(3, 2560)  # 640 1280 1920  2560# 宽
# cap.set(4, 720)   # 720  1080  # 高
# cap.set(5, 60)  # 帧数
# cap.set(10, 150)  # 亮度
# cap.set(14, 150)  # 增益
# cap.set(11, 90)  # 对比度
# cap.set(15, 150)  # 曝光
python 复制代码
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) 

cv2.VideoCapture(camera_number + cv2.CAP_DSHOW) 是OpenCV在Windows平台下用于指定使用DirectShow作为视频捕获后端的一种方式。这里的 cv2.CAP_DSHOW 是一个常量,表示使用DirectShow(DirectX Show)技术来访问和控制摄像头。 cv2.CAP_DSHOW 参数含义: 当你将cv2.CAP_DSHOW 与摄像头编号相加时,实际上是告诉OpenCV使用DirectShow框架来打开并操作指定的摄像头设备。

DirectShow是Windows操作系统中用于处理音/视频流的一种API集合,它可以动态构建数据源到渲染器之间的过滤器链,支持多种音频和视频格式,并具有一定的硬件加速能力。

cv2.CAP_DSHOW设置后帧率变慢的问题

使用外设摄像头时,cv2.CAP_DSHOW设置后,初始加载比较快,但帧率下降了,另外也不能设置图像大小。然而,使用电脑自带的摄像头却未出现帧率下降的情况,稳定保存30FPS。

另外,查看网上也有人遇到相同的问题。

2.所有python实现代码

python 复制代码
import cv2
import time

cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # 使用cv2.CAP_DSHOW后启动快,但帧率慢了
cap.set(6, cv2.VideoWriter.fourcc('M', 'J', 'P', 'G'))
# cap.set(6, cv2.VideoWriter.fourcc('Y', 'U', 'V', '2'))

# 使用cv2.CAP_DSHOW后大小为640
cap.set(3, 2560)  # 640 1280 1920  2560# 宽
# cap.set(4, 720)   # 720  1080  # 高
# cap.set(5, 60)  # 帧数
# cap.set(10, 150)  # 亮度
# cap.set(14, 150)  # 增益
# cap.set(11, 90)  # 对比度
# cap.set(15, 150)  # 曝光

print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(cap.get(cv2.CAP_PROP_FPS))

num = 0
start = time.time()
fps = '0'
while(True):
    ret, frame = cap.read()
    num = num + 1
    frame = cv2.flip(frame, 1)
    # frame = beauty_face(frame)
    if (time.time() - start) > 1:
        fps = num / (time.time() - start)
        fps = str(round(fps, 2))
        num = 0
        start = time.time()
    cv2.putText(frame, "FPS:" + fps, (20, 20), 1, 1.5, (255, 255, 255), 2)
    cv2.imshow("DST", frame)

    stop = time.time()
    elapsed = stop - start
    # print('time=', elapsed)
    if 1 < elapsed < 1.5:
        print('time=', elapsed)
        print('frame num:', num)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

参考文献

python opencv 调用usb高帧率摄像头的坑
python-opencv使用摄像头
Python 使用 Opencv 库调用摄像头
openCV打开高清摄像头卡顿的问题

相关推荐
勾股导航4 小时前
OpenCV图像坐标系
人工智能·opencv·计算机视觉
格林威5 小时前
Baumer相机玻璃制品裂纹自动检测:提高透明材质检测精度的 6 个关键步骤,附 OpenCV+Halcon 实战代码!
人工智能·opencv·视觉检测·材质·工业相机·sdk开发·堡盟相机
没有不重的名么1 天前
Multiple Object Tracking as ID Prediction
深度学习·opencv·计算机视觉·目标跟踪
愚者游世1 天前
Opencv知识点大纲
人工智能·opencv·计算机视觉
格林威1 天前
Baumer相机电池极耳对齐度检测:提升叠片工艺精度的 5 个实用方案,附 OpenCV+Halcon 实战代码!
人工智能·opencv·机器学习·计算机视觉·视觉检测·工业相机·堡盟相机
403240731 天前
【Jetson开发避坑】虚拟环境(Conda/Venv)调用系统底层OpenCV与TensorRT的终极指南
人工智能·opencv·conda
格林威1 天前
Baumer相机电机转子偏心检测:实现动平衡预判的 5 个核心方法,附 OpenCV+Halcon 实战代码!
人工智能·深度学习·opencv·机器学习·计算机视觉·视觉检测·工业相机
侯孟禹1 天前
Gemini写的抠图工具
qt·opencv
qwy7152292581631 天前
17-像素点和ROI操作
人工智能·opencv·计算机视觉
茶栀(*´I`*)1 天前
OpenCV实战:从视频读写到高级目标追踪(MeanShift与CamShift详解)
图像处理·opencv·计算机视觉