我正在使用 OpenCV 3。如果摄像机与网络断开连接或帧出现问题,则使用带有 IP 摄像机的 VideoCapture 抓取帧会被阻止。
我首先检查 videoCapture.isOpened()
。如果是,我尝试了这些方法,但似乎没有任何效果:
1)抓取器>>框架
if(grabber.isOpened()) {
grabber >> frame;
// DO SOMETHING WITH FRAME
}
2) 阅读
if(grabber.isOpened()) {
if(!grabber.grab()){
cout << "failed to grab from camera" << endl;
} else {
if (grabber.retrieve(frame,0) ){
// DO SOMETHING WITH FRAME
} else {
// SHOW ERROR
}
}
}
3) 抓取/检索
if(grabber.isOpened()) {
if ( !grabber.read(frame) ) {
cout << "Unable to retrieve frame from video stream." << endl;
}
else {
// DO SOMETHING WITH FRAME
}
}
视频流在某个点卡住,使用所有先前的选项抓取一个帧,每个选项都阻塞但不退出或返回任何错误。
你知道有没有办法处理或解决这个问题?也许一些验证、try/catch 或计时器?
最佳答案
此问题由 this merge 解决但不幸的是 opencv_ffmpeg.dll 还没有发布。
你可以找到here更新了 opencv_ffmpeg.dll 和测试。
关于C++突然阻止使用VideoCapture从IP摄像机读取帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36750685/