这里的新用户和使用OpenCV进行编程的新手。
我正在使用Visual Studio 2012,并按照说明安装了所有OpenCV模块,运行代码捕获视频流和过滤器等没有问题。
我正在尝试为stanford U生成的光流示例重现代码: http://robots.stanford.edu/cs223b05/notes/CS%20223-B%20T1%20stavens_opencv_optical_flow.pdf
但似乎是使用cvQueryFrame获取访问冲突错误,所以我编写了一个简单的函数来测试问题:
int get_flow(){
CvCapture *input_video = cvCaptureFromFile("C:\\test.avi");
cvQueryFrame(input_video);
while(1){
if( cvWaitKey( 15 )==32 ) //wait until space key pressed
{
break;
}
}
return 0;
}
我已经检查了test.avi是否在正确的位置,但是每当任何代码(此代码或示例代码)运行cvQueryFrame命令时,我都会收到以下错误:
First-chance exception at 0x75E6A048 (msvcrt.dll) in Win32Project3.exe: 0xC0000005: Access violation reading location 0x011908C0.
Unhandled exception at 0x75E6A048 (msvcrt.dll) in Win32Project3.exe: 0xC0000005: Access violation reading location 0x011908C0.
根据我的理解意味着msvcrt.dll发出了关于访问某些内存点的错误,但我无法弄清楚问题是什么。
我自己使用了cvGrabFrame没有问题,但是一起使用cvGrabFrame和cvRetrieveFrame,或者只使用cvRetrieveFrame也会引发msvcrt.dll访问错误。
我不太确定在哪里一起查找错误或问题。我找不到任何特定的解决方案来解决这个问题。有任何想法吗? (PS - 我在调试模式下运行VS2012,并且x64机器上的所有opencv库都在x86上运行,并且chrome也是打开的)
谢谢!
答案 0 :(得分:0)
可能是您无法打开视频文件。而且由于该查询框架失败 您可以尝试使用以下代码来检查您是否真的能够打开视频文件,然后可以在其上调用查询框。
int main(int argc, char*argv[])
{
char *my_file = "C:\\test.avi";
std::cout<<"Video File "<<my_file<<std::endl;
cv::VideoCapture input_video;
if(input_video.open(my_file))
{
std::cout<<"Video file open "<<std::endl;
}
else
{
std::cout<<"Not able to Video file open "<<std::endl;
}
namedWindow("My_Win",1);
namedWindow("Segemented", 1);
Mat cap_img;
for(;;)
{
input_video >> cap_img;
imshow("My_Win", cap_img);
waitKey(0);
}
return 0;
}