使用OpenCV调用Pixy2外接相机捕获视频时出现Assertion failed错误的求助
解决Pixy2相机与OpenCV捕获视频时的!_src.empty()错误
这个错误我之前帮不少开发者排查过,本质是OpenCV没有成功捕获到图像帧,frame变量是空的,所以调用cv.imshow()时触发了断言失败的报错。咱们一步步来解决问题:
1. 先确认相机设备编号是否正确
你代码里用的是cv.VideoCapture(1),但Pixy2在很多系统里会被识别为0号设备。可以尝试把设备号改成0,或者用这段代码枚举所有可用的相机设备:
import cv2 as cv for i in range(4): # 测试0-3号设备 cap = cv.VideoCapture(i) if cap.isOpened(): print(f"找到可用相机,设备编号:{i}") cap.release()
2. 检查Pixy2的驱动是否正常
Pixy2需要安装官方驱动才能被系统识别:
- 下载并打开Pixy官方的PixyMon工具,按照提示完成驱动安装
- 打开Windows设备管理器,确认“照相机”分类下的Pixy2设备没有黄色感叹号
3. 修改代码增加错误检查,避免空帧报错
在原代码里加上相机初始化和帧读取的判断逻辑,这样能提前定位问题:
import cv2 as cv # 先尝试0号设备,或者换成你刚才枚举到的正确编号 vid = cv.VideoCapture(0) # 可以先去掉cv.CAP_DSHOW试试默认后端 # 检查相机是否成功打开 if not vid.isOpened(): print("无法打开相机,请检查设备编号或驱动!") exit() while True: ret, frame = vid.read() # 确认帧读取成功 if not ret: print("无法获取视频帧,相机可能已断开或不兼容当前捕获后端!") break cv.imshow('frame', frame) if cv.waitKey(1) & 0xFF == ord('q'): break vid.release() cv.destroyAllWindows()
4. 更换OpenCV的视频捕获后端
不同相机对OpenCV的捕获后端支持不同,你可以尝试更换后端:
- 换成
cv.CAP_MSMF:vid = cv.VideoCapture(0, cv.CAP_MSMF) - 或者直接去掉后端参数,用系统默认的捕获方式
5. 用Pixy2官方库验证相机可用性
如果上面的方法都不行,建议用Pixy2官方的Python库直接测试,确认相机本身能正常工作:
import pixy2 import cv2 as cv pixy = pixy2.Pixy2() if not pixy.init(): print("无法初始化Pixy2相机!") exit() while True: # 获取图像帧(需要Pixy2固件支持图像输出) frame = pixy.get_frame() if frame is not None: cv.imshow('Pixy2 Frame', frame) # 按q退出 if cv.waitKey(1) & 0xFF == ord('q'): break cv.destroyAllWindows()
内容的提问来源于stack exchange,提问作者Hussein Jammal
相关产品推荐
相关产品推荐

