IplImage* pFrame = 0;
IplImage* pFrame2 = 0;
CvCapture* pCapture = 0;
CvRect box;
box=cvRect(200,50,256,256);
//设置两个状态标志量
int c,num=0;
char key;
CString str;
if(!(pCapture = cvCaptureFromCAM(-1)))
{
MessageBox("Error 8:\r\n  摄像头无法打开,请查证","提示",48);
return;
}
cvNamedWindow("请保证唇部进入取景区域",CV_WINDOW_AUTOSIZE);
cvMoveWindow("请保证唇部进入取景区域",100,100);
//连续抓取图像并在Camera窗口显示(实现摄像功能)等待按键
while(pFrame = cvQueryFrame(pCapture))
{
cvRectangle (pFrame, cvPoint(box.x,box.y), cvPoint(box.x+box.width,box.y+box.height), cvScalar(0xff,0x00,0x00));
key=cvWaitKey(50);
//按回车键后再创建一个窗口,将按键时的图像截取显示出来
if(key==13)
{
cvNamedWindow("Image",CV_WINDOW_AUTOSIZE);
cvMoveWindow("Image",500,100);
pFrame2 = cvQueryFrame(pCapture);
cvRectangle (pFrame2, cvPoint(box.x,box.y), cvPoint(box.x+box.width,box.y+box.height), cvScalar(0xff,0x00,0x00));
while(1) 
{
cvShowImage( "Image", pFrame2 );
if((c=cvWaitKey(50))>=0) 
break;
}
str.Format("Image%d.bmp",num);
cvSaveImage(str,pFrame2);
cvDestroyWindow("Image");
//再次按键截取下一张图片
if(cvWaitKey(50)> 0)
{
cvReleaseImage(&pFrame);
cvReleaseCapture(&pCapture);
cvDestroyWindow("请保证唇部进入取景区域");
break;
}
}
if(key==27)//等待ESC键
{
break;
cvReleaseImage(&pFrame);
cvReleaseCapture(&pCapture);
cvDestroyWindow("请保证唇部进入取景区域");
}
cvShowImage("请保证唇部进入取景区域",pFrame);
}