最近安装的OpenCV 2.4.3尝试做一些视频捕获和对象区分。但遗憾的是,每次通过网络摄像头捕获视频的行为都会导致内存访问违规。
我正在使用Visual Studio 2010(Win 7 x86)和网络摄像头“A4 Tech USB2.0”。首先我认为可能问题在于相机本身,但后来我尝试使用videoInput.h
lib来获取相机的任何响应,但仍然没有结果。 (其他应用程序,如Skype看到它(并使其工作)没问题)。
这是一个代码(几乎是本书):
<pre>
#include "cv.h"
#include "highgui.h"
#include "stdlib.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY); //cvCaptureFromCAM( 0 );
assert( capture );
double width = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
double height = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
printf("[i] %.0f x %.0f\n", width, height );
IplImage* frame=0;
cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);
printf("[i] press Esc for quit!\n\n");
if(capture != NULL)
{
while(true)
{
frame = cvQueryFrame( capture ); //it crashes here all the time
cvShowImage("capture", frame);
char c = cvWaitKey(35);
if (c == 27)
{
break;
}
}
}
cvReleaseCapture( &capture );
cvDestroyWindow("capture");
return 0;
}
</pre>
使用相同的问题阅读其他主题并尝试解决一些问题:
(在捕获cvWaitKey(35)
之间添加间隔,
添加检查捕获设备是否真的存在if (capture != NULL)
但仍然无法理解为什么会这种情况继续发生。
更新:我最终得到的是控制台,它生成了OpenCVwindow和窗口本身的属性(看起来是灰色背景)。和内存访问冲突错误。
答案 0 :(得分:1)
经过一番思考和测试,找到了决议。
看来,DirectShow上的DirectVobSub过滤器以某种方式阻止我访问我的相机程序(通过OpenCV和VideoInput库)。每次我运行程序并访问我的相机时,它都会创建一个新的实例,这会导致访问内存违规。从我的PC上卸载后,代码开始工作。