我试图在Ubuntu 11.10上使用OpenCV 2.1同时从3台Logitech Webcam Pro 900设备流式传输图像.uvcvideo驱动程序会加载这些.
捕获两个设备工作正常,但有三个我遇到空间错误第三个:
libv4l2: error turning on stream: No space left on device
Run Code Online (Sandbox Code Playgroud)
我似乎遇到了这个问题:http: //renoirsrants.blogspot.com.au/2011/07/multiple-webcams-on-zoneminder.html我试图做怪癖= 128(或几乎任何其他两个权力的价值)技巧但无济于事.我还尝试了另一台带有两个USB 2.0集线器的机器,并将两个摄像头连接到一个,第三个摄像头连接到第二个,这导致了同样的问题.我大致如下初始化(使用N个摄像头,因此结果实际上放入STL向量):
cv::VideoCapture cap0(0); //(0,1,2..)
Run Code Online (Sandbox Code Playgroud)
并尝试捕获循环中的所有摄像机
cap0.retrieve(frame0);
Run Code Online (Sandbox Code Playgroud)
这适用于N = 2个摄像头.当我设置N = 3时,第三个窗口打开但没有图像出现,控制台被垃圾邮件充满了V4L2错误.同样,当我设置N = 2,并尝试打开第三个摄像头时说干酪(简单的网络摄像头捕获应用程序),这也不起作用.
现在变得很大但是:在通过启动三个实例尝试guvcview之后,我能够同时查看三个摄像头(在帧速率或相关方面没有问题),因此它似乎不是硬件问题.我认为我应该设置一些属性,但我不确定那是什么.我已经研究了MJPEG(这些相机似乎支持),但是没有成功设置这个属性,或者检测它们在运行时是从OpenCV启动它们的模式(yuyv?).
思考?
我在Ubuntu 12.04 64位上使用OpenCV 2.4.5.我希望能够设置Logitech C310网络摄像头的输入分辨率.相机支持最高1280x960(30fps),我可以在guvcview中以此分辨率观看视频.但OpenCV总是以640x480的速度获取视频.
在创建VideoCapture上限后立即尝试使用cap.set(CV_CAP_PROP_FRAME_WIDTH,1280)和cap.set(CV_CAP_PROP_FRAME_HEIGHT,960)更改分辨率无效; 在获取每个帧之前尝试立即设置它们会导致程序立即崩溃.我也不能用这种方法降低分辨率.我也收到错误"HIGHGUI ERROR:V4L/V4L2:VIDIOC_S_CROP".我认为这可能是相关的,因为它在创建VideoCapture时出现一次,并且当我尝试设置宽度和高度时出现一次(但奇怪的是,如果我尝试仅设置其中一个,则不会).
我知道我不是第一个遇到这个问题的人,但我还没有找到一个解决方案,经过谷歌搜索和搜索SO以及互联网上的其他地方(在我已经尝试过的许多事情中,无法获得的答案是这个StackOverflow问题:提高OpenCV中的摄像头捕获分辨率.这是OpenCV中的错误吗?如果是这样,这是一个相当明显的.
以下是展示问题的代码示例(只是OpenCV视频显示代码的修改版本):
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main(int argc, char** argv)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
Mat image;
namedWindow("Video", CV_WINDOW_AUTOSIZE);
while(1)
{
// cap.set(CV_CAP_PROP_FRAME_WIDTH, 160);
// cap.set(CV_CAP_PROP_FRAME_HEIGHT, 120);
cap >> image;
imshow("Video", image);
if(waitKey(10) == 99 ) break;
}
return
}
Run Code Online (Sandbox Code Playgroud)
实际上,如上所述,我得到两个"HIGHGUI ERROR",我得到一个640x480输出.我知道160x120是我的相机支持的分辨率v4l2-ctl --list-formats-ext.如果我取消注释while循环中两个注释掉的行,程序会立即崩溃.
这些可能是相关的或有可能的解决方案:http://answers.opencv.org/question/11427/decreasing-capture-resolution-of-webcam/,http://answers.opencv.org/question/30062/error-设置-分辨率的视频捕获装置/