2011-01-20 72 views
2

我使用的OpenCV 2.2和Visual Studio 2010在Win 7的64位PC访问网络摄像头。不能与OpenCV的

我能够通过OpenCV显示图片和播放AVI文件,如“Learning OpenCV”中所述,但我无法捕获网络摄像头图像。即使与OpenCV文件一起提供的样本也无法访问网络摄像头。

我被问到“视频源 - >捕获源”,并且有两种选择:HP webcam Splitter和HP网络摄像头。如果我选择HP摄像头,窗口会立即关闭而不显示任何错误。 (我认为任何错误信息太快都无法在关闭之前看到)。如果我选择HP网络摄像头分光器则新的窗口,在这里的摄像头图像(视频)都应该来了,充满了统一的灰色。网络摄像头指示灯亮起,但看不到视频。我的摄像头正常工作与闪光灯(www.testmycam.com),并用DirectShow的http://www.codeproject.com/KB/audio-video/WebcamUsingDirectShowNET.aspx

我曾尝试使用此得到一些错误信息:

#include "cv.h" 
#include "highgui.h" 
#include <iostream> 
using namespace cv; 
using namespace std; 

int main(int, char**) 
{ 
    VideoCapture cap("0"); // open the default camera 
    if(!cap.isOpened()) // check if we succeeded 
     { 
    cout << "Error opening camera!"; 
    getchar(); 
    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; 
} 

而且我得到的错误信息是:

warning: Error opening file (C:\Users\vp\work\ocv\opencv\modules\highgui\src\cap 
_ffmpeg.cpp:454) 
Error opening camera! 

我不知道这个“cap_ffmpeg.cpp”是什么,我不知道这是否与多孔的“惠普媒体智能”的东西有任何问题。

任何帮助将不胜感激。

+0

在行视频捕捉帽(“0”);我添加了“引号”。也许这就是问题所在。但仍然为什么默认样本不工作?并且在结束“YouCam Mirage”流程后http://www.pacs-portal.co.uk/startup_pages/22000-22999/22266_YCMMirage.exe.htm,如果选择“HP Webcam”而不是“ HP Webcam Spltter“。奇怪。 – Astromaz3 2011-01-20 16:42:40

+0

我不知道这是否适合你,但user660815的回复解决了我所有的问题。您可能需要考虑将他的答案标记为正确答案。 – Tom 2011-03-24 13:36:16

回答

11

我在Windows 7 64位上遇到了同样的问题。我不得不重新编译opencv_highgui改变在C “预处理程序定义”/ C++的属性页的面板包括:

HAVE_VIDEOINPUT HAVE_DSHOW

希望这有助于

2

cap_ffmpeg.cpp是使用ffmpeg执行设备捕获的源文件。如果来自OpenCV的给出的默认实例不与你的摄像头的工作,你的运气了。我建议你再买一个支持的。

+0

大鼠。至少现在我知道了。谢谢。 – Astromaz3 2011-01-20 16:38:53

1

这里有一个文章我写了一段时间回来。它使用videoInput库从网络摄像头获取输入。它使用DirectX,因此它可以与几乎所有的摄像头一起使用。 Capturing images with DirectX

1

最近我安装了OpenCV 2.2和NetBeans 6.9.1。我有相机捕捉一个问题,在窗口中的图像是黑色的,但该程序运行非常好,没有错误。我必须以管理员用户身份运行NetBeans才能解决此问题。

我希望这可以帮助你。

1

我只是切换到OpenCV的2.2和我有本质上是相同的问题,但运行Vista 32位compture。摄像头将开始,但我会得到一个错误消息,设置相机的宽度属性。如果我特别要求DirectShow的摄像头,cvCreateCameraCapture会失败。
我的想法是怎么回事是HighGUI分布版本是建立不包括DirectShow的摄像机。在OpenCV的青睐的Windows摄像头用于视频可以在Windows,VFW但由于Windows Vista中传出后,已被弃用,创造了各种各样的问题。为什么他们不把它包括在内,我不知道。检查源文件cap.cpp

我的下一个步骤是重建HighGUI自己,并确保标志HAVE_DSHOW设置。我似乎记得OpenCV中的最后一个版本,我一直在使用,直到我重建它确保DirectShow的版本启用有同样的问题。

1

我经历了同样的问题。我的Vaio网络摄像头LED亮起,但屏幕上没有图像。 然后我试图将第一帧导出为JPEG文件并工作。然后,我试图在捕捉任何帧之前插入33毫秒的延迟,这次它像一个魅力。希望这会有所帮助。

0

CMake的GUI,MSVC++ 10E, Vista 32bit,OpenCV2.2

看起来像HAVE_VIDEOINPUT/WITH_VIDEOINPUT选项不起作用。

然而,加入:/D HAVE_DSHOW /D HAVE_VIDEOINPUTCMAKE_CXX_FLAGSCMAKE_C_FLAGS对我来说是个窍门(由于宏定义会有警告)。

0

一旦你创建了cv::VideoCapture,你应该给出一个整数不是字符串(因为字符串意味着输入是一个文件)。

要打开默认的摄像头,具备

cv::VideoCapture capture(0); 

打开流,它会正常工作。