我有一个从相机捕获帧的应用程序,然后将其显示为imshow(),如下所示:

VideoCapture cap(0);

if (!cap.isOpened())  // if not success, exit program
    {
        cout << "Cannot open the web cam" << endl;
        system("pause");
        return -1;
    }

while (true) {
        bool bSuccess = cap.read(imgOriginal); // read a new frame from video
        if (!bSuccess) //if not success, break loop
        {
            cout << "Cannot read a frame from video stream" << endl;
            break;
        }

cv::imshow("Image", imgOriginal);

if (waitKey(10) == 27)
        {
            break;
            return 1;
        }
}

该程序运行良好。但是当我删除wait_key循环而不是给它其他处理时(例如可以描述while循环是否正常的变量,而是wait_key(10)== 27我放置了checkVariable == false),一切都出错了。我得到的是灰色图像,而不是普通图像。你能解释一下为什么吗?

最佳答案

waitKey函数不仅可以从用户那里获得密钥,而且还等同于其他GUI框架中的spin。这意味着它还会“更新”显示图像的窗口的任何事件,例如显示新图像(它很有可能以默认值grey开头)。因此,至少在每次使用imshow时,您都必须使用该函数。它还会暂停一小段时间(以毫秒为单位),因此您可以使用它来避免空闲循环像疯了一样占用CPU。

如果不需要,可以始终忽略waitKey的结果,但必须运行它。

我希望这可以消除您的疑问。

关于c++ - 没有try_key的灰度图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50778670/

10-11 22:21
查看更多