无法使用 openCV 让 c170logitech 网络摄像头工作(无法将像素格式从 MJPG 更改为 YUYV)



我尝试运行用于对象检测的教程代码。 我随身携带罗技 C170 网络摄像头。 我无法在连接此凸轮的情况下运行任何教程代码。

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP --(!) No captured frame -- Break!

但是同样的程序在我的内置网络摄像头上有效运行。 由于我是OpenCV的新手,因此我无法理解错误。

当我使用

v4l2-ctl --device=/dev/video0 --all

驱动程序信息(不使用 libv4l2): 驱动程序名称 : uvcvideo 卡类型 : 网络摄像头 C170 总线信息:USB-0000:00:1D.0-1.2 驱动程序版本:3.2.50 能力 : 0x04000001 视频捕获 流 格式化视频捕获: 宽度/高度 : 640/480 像素格式 : "MJPG" 字段 : 无 每行字节数:0 尺寸图片 : 921600 色彩空间 : SRGB 裁剪功能视频捕获: 边界 : 左 0, 顶部 0, 宽 640, 高 480 默认值:左 0、顶部 0、宽 640、高 480 像素宽高比:1/1 视频输入:0(相机1:正常) 流参数视频捕获: 能力 : 每帧时间 每秒帧数:30.000 (30/1) 读取缓冲区 : 0

我得到的区别在于两者的像素格式不同。 内置凸轮是YUYV,而罗技是MJPG。 此外,我完全不知道MJPG格式。我尝试使用

v4l2-ctl --device=/dev/video1 --set-fmt-video=width=640,height=480,pixelformat=0

我可以更改格式,但是当我再次运行程序时,错误重复,系统再次将格式更改为MJPG。

把我当成OpenCV中最小的家伙。

几天来,我一直在尝试将罗技 C170 与 V4L2 API 一起使用,捕获 YUYV 未压缩图像似乎在 640x480 或 640x360 分辨率下不起作用。等待帧缓冲区填充会使 V4L2 停止。

但这适用于UVC功能中报告的所有其他分辨率,例如352x288,320x240,176x144,160x120,

544x288,432x240和320x176。

对于 640x480 分辨率,我只设法从相机中转储 JFIF 压缩帧。

如果您尝试图像宽度低于 640 像素,也许您可以使您的代码与此相机一起使用。

最新更新