使用opencv检索视频帧 - 未处理的异常
Posted
技术标签:
【中文标题】使用opencv检索视频帧 - 未处理的异常【英文标题】:Retrieving video frames using opencv - unhandled exception 【发布时间】:2013-05-15 14:35:53 【问题描述】:我使用cvQueryframes
获取视频帧,但在avi
文件的少数视频中我得到:
Unhandled exception at 0x715c14f0 0xC0000005:
Access violation reading location 0x02f509f0.
我正在使用 OpenCV 2.4.5
和 Qt5
的 Visual Studio 2010
CvCapture* cap= cvCaptureFromFile(file);
frame = cvQueryFrame(capture);
【问题讨论】:
您需要更具体。显示代码会有所帮助,因为您似乎在做一些不安全的事情,比如在数组边界之外读取。 请给你的问题加分。它的工资。 你的调试器说什么? CvCapture* cap= cvCaptureFromFile(file);帧 = cvQueryFrame(捕获);我得到异常的代码 我猜你拼错了cap
或capture
。如果您尝试打开VfW
不支持的文件,您应该检查cvCaptureFromFile
的返回值,即NULL
。
【参考方案1】:
这可能有多种原因,链接错误的文件名,未找到编解码器等。尝试在打开文件之前放置调试 printf 以查看文件名是否正确,如果它不为 NULL,请检查上限。你可以试试这样的
int main(int argc, char*argv[])
char *my_file = "C:\\vid_an2\\desp_me.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;
【讨论】:
谢谢你的好回答,我会试着告诉你,我已经检查过文件是否为空,无论如何,非常感谢你 请注意,您使用的是 OpenCV 的 C++ 接口,而 OP 使用的是 C 接口。 是的,上面是C++接口。另外我建议检查是否有其他使用 CAM 的应用程序。如果是,那么最好先关闭它。 上述代码抛出异常,“OpenCVTestApp.exe 中 0x754bc6e3 处未处理的异常:Microsoft C++ 异常:内存位置 0x001df568 处的 cv::Exception..”请帮助我进一步困惑 以上代码用于测试目的。您需要将文件名("C:\\vid_an2\\desp_me.avi";) 更改为系统上存在的其他文件名。如果它不起作用,请尝试使用 OpenCV 加载一个简单的 jpg 图像,以确保您的 opencv 安装正确,否则您需要重新安装您的 opencv。以上是关于使用opencv检索视频帧 - 未处理的异常的主要内容,如果未能解决你的问题,请参考以下文章
未考虑 Java OpenCV VideoCapture 属性。需要避免最新帧的“当真”。多相机环境
OpenCV-Python:如何从实时视频流中获取最新帧或跳过旧帧