c++调用OpenCV打开电脑摄像头,会使用while(1)死循环,此时,关闭imshow窗口,因为处在while死循环中,相当于关闭了一个小线程,但是循环里会立即打开一个新的线程,然后继续调用摄像头,处在一个imshow窗口关不掉的状态。
为了解决这个问题,经过对网上博客的多方搜索,发现waitKey(30)返回的,对应的ascii值为27(也就是ESC键),代码如下。
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
int main() {
VideoCapture cap(0);
if (!cap.isOpened()) {
std::cout << "!!!";
return -1;
}
Mat frame;
bool judge = true;
namedWindow("test1");
while (judge)
{
cap >> frame;
if (frame.empty()) break;
imshow("test1", frame);
if (27 == waitKey(30)) {//按键盘:ESC键结束程序
break; //waitKey(30)返回的ASCII值为27,对应的按钮:ESC
}
}
destroyWindow("test1");
return 0;
}