c++ opencv VideoCapture读取摄像头闪退的解决方法

1. 遇到的问题

我在跑openvino自带的human pose estimation demo的时候,如果把输入改为从摄像头读取视频流,那么程序在启动后,摄像头会亮一会儿,然后程序就退出了。

2.原因

困扰了很久,opencv 在 cv::VideoCapture cap; cap.open(0, cv::CAP_ANY);的时候都没有问题,问题出在cv::Mat img; cap.read(img);上,因为笔记本摄像头启动较慢,在读取图像的时候,一开始读的图像的是空的,而demo程序在判断图像为空之后就抛出异常(见下段代码中的注释部分)。

        cv::Mat img;
        if (!cap.read(img)) {
            //throw std::runtime_error("The image can't be captured from the camera");
            std::cout << "This frame can't be captured from the camera" << std::endl;
            
        }

3. 解决

解决方法就是建立一个while循环,如果cap.read的图像为空,就一直循环,直到不为空。如下代码所示:

```cv::Mat curr_frame = cap->read();
        while (curr_frame.empty()) {
            curr_frame = cap->read();
        }

你可能感兴趣的:(c++,opencv)