树莓派连接Imaginsource DFK 33UX178工业摄像头输出黑屏问题求助
解决方案
修复OpenCV脚本报错
报错AttributeError: __enter__由低版本OpenCV不支持VideoCapture上下文管理器导致,低于4.5.1版本的OpenCV未实现对应接口,需修改代码写法,修改后参考代码如下:
import cv2 import io import numpy as np import time # 替换原with语句写法 camera = cv2.VideoCapture(0) if not camera.isOpened(): raise RuntimeError("无法打开摄像头") # 设置分辨率 ret = camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640) ret = camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) font = cv2.FONT_HERSHEY_SIMPLEX try: stream = io.BytesIO() while(True): ret, frame = camera.read() if not ret: print("帧读取失败,退出") break frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) frame_expanded = np.expand_dims(frame_rgb, axis=0) start_time = time.time() # 注:interpreter、labels、classify_image为原有业务逻辑定义,需确保对应依赖正常导入 results = classify_image(interpreter, frame) elapsed_ms = (time.time() - start_time) * 1000 label_id, prob = results[0] stream.seek(0) stream.truncate() cv2.putText(frame, labels[label_id],(30,50),font,1,(255,255,0),2,cv2.LINE_AA) cv2.imshow('Object detector', frame) if cv2.waitKey(1) == ord('q'): break finally: camera.release() cv2.destroyAllWindows()
修复摄像头黑屏问题
黑屏根源是Windows下调整的摄像头参数(曝光、增益等)被存储在摄像头临时固件中,Linux默认UVC驱动不会主动重置这些参数,导致曝光值过低。按以下步骤操作即可修复:
- 安装v4l2摄像头控制工具
执行命令:sudo apt update && sudo apt install v4l-utils -y - 确认摄像头设备号
执行命令:v4l2-ctl --list-devices,找到The Imaging Source Europe GmbH对应的设备路径,默认一般为/dev/video0,后续命令中如果你的设备号不同请自行替换。 - 重置摄像头参数
开启自动曝光:v4l2-ctl -d /dev/video0 --set-ctrl=auto_exposure=3
调整曝光绝对值:v4l2-ctl -d /dev/video0 --set-ctrl=exposure_time_absolute=200
调整增益:v4l2-ctl -d /dev/video0 --set-ctrl=gain=100
调整完成后执行fswebcam test.jpg测试拍摄,可根据实际画面效果调整曝光和增益的数值。 - 参数固化(可选)
如果每次重新插拔摄像头后参数都会异常,可将上述set-ctrl命令写入开机启动脚本,或在调用摄像头的代码中先执行命令重置参数。
如果调整参数后依旧无法正常出图,可安装The Imaging Source官方提供的Linux设备驱动,适配性优于系统默认UVC驱动。
内容的提问来源于stack exchange,提问作者Meet Mangukia
相关产品推荐
相关产品推荐

