我使用的opencv版本是249的,因为感觉使用VideoCapture类来控制摄像头输出图像并且保存比较容易,所以一直使用这个类,但是却出现一个问题。
在使用这个类的capture.set(CV_CAP_PROP_FRAME_WIDTH,w)和capture.set(CV_CAP_PROP_FRAME_HEIGHT,h)来设置摄像头分辨率的时候总是
失败,出的一直是默认的640*480的图像,没有办法设置高清分辨率(在摄像头支持更高分辨率的情况下)。
最后才知道使用
cvSetCaptureProperty(camera , CV_CAP_PROP_FRAME_WIDTH , 2048);
cvSetCaptureProperty(camera , CV_CAP_PROP_FRAME_HEIGHT , 1536);
这两个函数来设置分辨率是可以的,但是摄像头需要使用CvCapture这个结构体来表示。
完整代码如下
int _tmain(int argc, _TCHAR* argv[])
{
int id;
cout <<"Camera ID:";
cin>>id;
VideoCapture capture;
CvCapture *camera = cvCaptureFromCAM(id);
if(NULL == camera){
cout <<"打开摄像头失败"<<endl;
}
cvSetCaptureProperty(camera , CV_CAP_PROP_FRAME_WIDTH , 2048);
cvSetCaptureProperty(camera , CV_CAP_PROP_FRAME_HEIGHT , 1536);
while(1){
IplImage * img = cvQueryFrame(camera);
cvSaveImage("C:\\Aratek.jpg",img);
cvShowImage("aratek",img);
waitKey(20);
}
return 0;
}