python+opecv打开电脑本地相机并切换不同分辨率
一、实现业务场景:
1、电脑摄像头功能要切换相机不同分辨率
二、安装、前置条件
1、电脑支持摄像头并驱动正常
2、python安装opencv 并使用国内源【豆瓣】
pip install -i https://pypi.douban.com/simple opencv-python
三、实现代码
import cv2
def change_resolution(cap, width, height):
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
# if __name__ == "__main__":
# 打开摄像头
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("无法打开摄像头!!!")
# resolutions = [(640, 480), (1280, 720), (1920, 1080)]
resolutions = [(320, 240),(640, 480), (1280, 720),(1920, 1080),(2560, 1440)]
current_resolution = 0
supported_resolutions = []
for resolution in resolutions:
width, height = resolution
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
if cap.get(cv2.CAP_PROP_FRAME_WIDTH) == width and cap.get(cv2.CAP_PROP_FRAME_HEIGHT) == height:
supported_resolutions.append(resolution)
print("摄像头支持的分辨率:", supported_resolutions)
while True:
# 获取当前分辨率
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print("当前分辨率:{}x{}".format(width, height))
# 读取一帧
ret, frame = cap.read()
if not ret:
print("无法接收视频流,退出")
break
cv2.imshow("Video", frame)
# 检测按键事件
key = cv2.waitKey(1)
# 如果按下 'q' 键,退出循环
if key & 0xFF == ord('q'):
break
# 自动切换到下一个分辨率
current_resolution = (current_resolution + 1) % len(resolutions)
width, height = resolutions[current_resolution]
change_resolution(cap, width, height)
print("已切换分辨率为{}x{}".format(width, height))
# 等待一段时间(例如5 b秒)
cv2.waitKey(1000)
# 释放摄像头资源
cap.release()
cv2.destroyAllWindows()