我使用的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;
}