OpenCV网络摄像头捕获问题

我已经安装了OpenCV 2.2,现在我无法使网络摄像头捕获工作。 它在2.1中运行正常。 OpenCV检测到网络摄像头,不报告任何错误或警告,但每个帧都是灰色图像。 我甚至尝试过OpenCV wiki的代码示例:

VideoCapture cap(0); // open the default camera if(!cap.isOpened()) // check if we succeeded return -1; Mat edges; namedWindow("edges",1); for(;;) { Mat frame; cap >> frame; // get a new frame from camera cvtColor(frame, edges, CV_BGR2GRAY); //GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); //Canny(edges, edges, 0, 30, 3); imshow("edges", edges); if(waitKey(30) >= 0) break; } // the camera will be deinitialized automatically in VideoCapture destructor return 0; 

有没有人遇到过这个问题? 我使用的是64位Win7和Visual Studio 2010。

经过很长时间的搜索,我找到了解决方案。

问题是如果在显示帧之间没有延迟发生这个问题。

解决方案是cvWaitKey(20); 在循环中。

问题在于我使用的相机,MSFT LifeCam。 我试过Logitech C210和120,它们都运行良好。

这是解决方案。

捕获的每个图像帧都在下面第一行中转换为灰度图像。 单独注释和运行代码将显示错误,因为您没有将任何已处理的图像捕获到边框中,这将以imshow显示。

因此注释cvtColor行并将cvtColor的第二个参数imshowframe 。 这将允许您显示网络摄像头的彩色video。

 cvtColor(frame, edges, CV_BGR2GRAY); imshow("edges", frame); 

我真的对OpenCV一无所知,但以下问题不是问题吗?

 cvtColor(frame, edges, CV_BGR2GRAY); 

好像你是故意将BGR颜色空间转换为灰度空间。

不应该是这样的:

 cvtColor(frame, edges, CV_BGR2RGB); 

您也可以尝试一下这篇文章 。

简单来说,改变

importcv

将cv2.cv导入为cv

为我工作。 另见这里的post。

我有同样的问题。 我想它可能是我的相机上的设置,因为我应该输入640x480px(我无法调整),我无法调整Feed的权限。 所以我安装了一个虚拟网络摄像头,几乎解决了这两个问题。 我得到了一个输入对话框,选择了虚拟摄像头并且它有效。 我设法在应用程序中将其设置为640×480。

我的虚拟相机被称为ManyCam,但看起来它是为十几岁的女孩制作的,希望我安装其他3个应用程序,而我仍然不确定天气是否带有“互补”特洛伊木马。

但是,它可以让您调整颜色,色调,对比度等以及测试所需的其他内容。

我正在使用cvtColor并发现了

cvtColor(image,image,CV_BGR2RGB); 没用。

但好消息是这个改变工作!!

 cvtColor(image,image,**COLOR_BGR2RGB**); 

还包括:

 include opencv2/imgproc/imgproc.hpp 

在.pro文件中的库:

 -lopencv_imgproc 

试试这个:

 VideoCapture cap(0); // open the default camera if(!cap.isOpened()) // check if we succeeded { cout<<"Cam not captured\n"; } Mat frame; namedWindow("frame"); for(;;) { cap >> frame; // get a new frame from camera imshow("frame", frame); if(waitKey(10) >= 0) break; } return 0;