这里是新用户,对使用OpenCV编程相当陌生。
我使用的是Visual Studio2012,并且已经按照说明安装了所有的OpenCV模块,运行代码来捕获视频流和过滤器等都没有问题。
我正在尝试复制斯坦福大学生产的光流示例的代码: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 -I在调试模式下运行VS2012,并在x64机器上的x86中运行所有opencv库,chrome也是打开的)
谢谢!
发布于 2013-05-02 00:50:54
可能是您无法打开视频文件。由于查询帧失败,您可以尝试以下代码来检查是否真的能够打开视频文件,然后可以对其调用查询帧。
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;
}https://stackoverflow.com/questions/16320789
复制相似问题