我有一个从相机捕获帧的应用程序,然后将其显示为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/