我在win 7 64位PC上使用OpenCV 2.2和visual studio 2010。
我可以通过OpenCV显示图片和播放AVI文件,如“学习OpenCV”一书中所述,但我无法捕捉网络摄像头图像。即使与OpenCV文件一起提供的样本也无法访问网络摄像头。
我被问到“视频源 - >捕获源”,有两种选择:HP webcam Splitter和HP网络摄像头。如果我选择HP网络摄像头,窗口会立即关闭而不会显示任何错误。 (我认为任何错误信息都太快,无法在关闭之前看到)。如果我选择HP Webcam splitter,那么网络摄像机图像(视频)应该出现的新窗口将填充均匀的灰色。网络摄像头LED亮起但没有看到视频。我的网络摄像头适用于flash(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”是什么,我不知道这是否与爱管闲事的“HP Media Smart”有任何问题。
非常感谢任何帮助。
答案 0 :(得分:12)
我在Windows 7 64位上遇到了同样的问题。我必须重新编译opencv_highgui,在属性页面的C / C ++面板中更改“Preprocesser Definitions”以包含:
HAVE_VIDEOINPUT HAVE_DSHOW
希望这有帮助
答案 1 :(得分:1)
cap_ffmpeg.cpp是使用ffmpeg执行设备捕获的源文件。如果OpenCV提供的默认示例不适用于您的网络摄像头,那么您就不走运了。我建议你买另一个支持的。
答案 2 :(得分:1)
这是我写的一篇文章。它使用videoInput库从网络摄像头获取输入。它使用DirectX,因此几乎适用于所有网络摄像头。 Capturing images with DirectX
答案 3 :(得分:1)
最近我安装了OpenCV 2.2和NetBeans 6.9.1。我有相机捕获问题,窗口中的图像是黑色但程序运行完美,没有错误。我必须以管理员用户身份运行NetBeans才能解决此问题。
我希望这可以帮助你们所有人。
答案 4 :(得分:1)
我刚刚切换到OpenCV 2.2并且基本上遇到了相同的问题,但运行Vista的是32位。网络摄像头将启动,但我收到一条错误消息,设置相机的宽度属性。如果我特意请求DirectShow相机,cvCreateCameraCapture将失败 我认为正在进行的是HighGUI的发行版本是在不包括DirectShow相机的情况下构建的。 OpenCV上最受青睐的Windows摄像头曾经是Video For Windows,VFW但是自从Windows Vista问世以来已经被弃用并且已经产生了各种各样的问题。我不知道他们为什么不包括它。检查源文件cap.cpp
我的下一步是自己重建HighGUI并确保设置了标志HAVE_DSHOW。我似乎记得在上次使用的OpenCV版本中遇到了同样的问题,直到我重建它,确保启用了DirectShow版本。
答案 5 :(得分:1)
我遇到了同样的问题。我的Vaio网络摄像头LED亮起,但屏幕上没有图像。 然后我尝试将第一帧导出为JPEG文件并将其工作。然后我尝试在捕获任何帧之前插入33ms的延迟,这次它就像一个魅力。希望这会有所帮助。
答案 6 :(得分:0)
CMAKE GUI,MSVC ++ 10E,Vista 32bit,OpenCV2.2
看起来HAVE_VIDEOINPUT/WITH_VIDEOINPUT
选项不起作用。
然而,将/D HAVE_DSHOW /D HAVE_VIDEOINPUT
添加到CMAKE_CXX_FLAGS
,CMAKE_C_FLAGS
为我做了伎俩(由于宏重新定义会有警告)。
答案 7 :(得分:0)
创建cv::VideoCapture
后,您应该提供整数而不是字符串(因为字符串表示输入是文件)。
要打开默认摄像头,请使用
打开流cv::VideoCapture capture(0);
它会正常工作。