int process(VideoCapture& capture)
{
int n = 0;
char filename[200];
string window_name = "video | q or esc to quit";
cout << " \n\t按下【Space】空格键可以截图,图片将存放在工程目录下。\n\n\t【Esc】和【q】键 - 退出程序。 " << endl;
namedWindow(window_name, CV_WINDOW_KEEPRATIO); //resizable window;
Mat frame;
for (;;)
{
capture >> frame;
if (frame.empty())
break;
cv::Mat gray;
cv::cvtColor(frame,gray,COLOR_RGB2GRAY);//转换为灰度图
//vector<string> codes;
vector<DataMatrixCode> codes;
Mat corners;
findDataMatrix(gray, codes);
drawDataMatrixCodes(codes, frame);
imshow(window_name, frame);
char key = (char) waitKey(1); //delay N millis, usually long enough to display and capture input
switch (key)
{
case 'q':
case 'Q':
case 27: //escape key
return 0;
case ' ': //Save an image
sprintf(filename, "视频截图%.3d.jpg", n++);
imwrite(filename, frame);
cout << "\n\t>保存了 " << filename <<"文件到工程目录下"<< endl;
break;
default:
break;
}
}
return 0;
}
//-----------------------------------【main( )函数】--------------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始
//-------------------------------------------------------------------------------------------------
int main( )
{
//【1】从摄像头读入视频
VideoCapture capture(0);
if (!capture.isOpened())
{
cerr << "Failed to open a video device or video file!\n" << endl;
return 1;
}
return process(capture);
}