你能建议一个更干净的方法吗?
日Thnx
答案 0 :(得分:0)
检测相机连接/断开可能需要一些技巧。
我建议您在应用程序运行时启动另一个线程来检查循环中cvCreateCameraCapture()
的成功。
如下所示:
while (run_detection_thread) // global variable controlled by the main thread
{
CvCapture* capture = cvCreateCameraCapture(-1); //-1 or whatever number works for you
if (camera) //camera is connected
{
sleep(1);
}
else
{
// camera was disconnected
}
}
答案 1 :(得分:0)
我认为我对此问题有一个很好的解决方法。我创建了一个带有零的辅助Mat数组,其分辨率与摄像机的输出相同。我将它分配给Mat数组,刚刚分配从相机捕获的帧,最后我检查该数组的规范。如果它等于零则意味着没有从相机捕获新帧。
VideoCapture cap(0);
if(!cap.isOpened()) return -1;
Mat frame;
cap >> frame;
Mat emptyFrame = Mat::zeros(CV_CAP_PROP_FRAME_WIDTH, CV_CAP_PROP_FRAME_HEIGHT, CV_32F);
for(;;)
{
frame = emptyFrame;
cap >> frame;
if (norm(frame) == 0) break;
}