You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 05:08:13