【发布时间】:2016-12-01 15:08:36
【问题描述】:
我正在使用 IP 摄像机,需要知道捕获失败的时间。根据 OpenCV 文档,VideoCapture::read(OutputArray image) 应在未抓取任何帧时返回 false(相机已断开连接,或没有更多帧)在视频文件中),但这没有发生。当我的相机断开连接时,我的代码卡在了读取功能中。我需要知道捕获失败的时间。如何才能做到这一点?我的代码如下:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
String ptzCam = "rtsp://user:password@ip:port/videoMain";
VideoCapture cap(ptzCam); // open the default camera
if (!cap.isOpened()) {
return -1;
}
namedWindow("capture", 1);
for (;;) {
Mat frame;
if (cap.read(frame)) {
cout << "Capturing... " << endl;
imshow("capture", frame);
}
else {
cout << "Capture is not opened." << endl;
}
if (waitKey(30) >= 0)
break;
}
cap.release();
destroyAllWindows();
}
【问题讨论】:
-
是冻结(可能是驱动程序问题)还是没有返回图像?你可以测试 if(frame.empty()) doSomething;在后一种情况下。
-
它冻结并且代码卡在 cap.read(frame) 中。将尝试检查框架是否为空并尝试更新驱动程序。感谢您的提示。
-
如果冻结,您无法检查结果是否为空(因为结果永远不会发生)。我想这是您相机的驱动程序问题,而不是严格意义上的 openCV 问题。可能你什么都做不了……你用的是哪个操作系统?
-
我使用的是 Windows 7。
-
您可以尝试使用
InputLibrary的测试应用程序打开相机,并检查如果在那里拔下相机是否会出现相同的行为。或者 DirectShow、VLC 或其他可以打开相机的应用程序也是如此。
标签: c++ image opencv image-processing