Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Increasing camera capture resolution in OpenCV

In my C/C++ program, I'm using OpenCV to capture images from my webcam. The camera (Logitech QuickCam IM) can capture at resolutions 320x240, 640x480 and 1280x960. But, for some strange reason, OpenCV gives me images of resolution 320x240 only. Calls to change the resolution using cvSetCaptureProperty() with other resolution values just don't work. How do I capture images with the other resolutions possible with my webcam?

like image 321
Ashwin Nanjappa Avatar asked Aug 18 '08 07:08

Ashwin Nanjappa


People also ask

What is the resolution of a camera?

Resolution is the camera's ability to classify and effectively present discrete image information, such as details, patterns and textures within a given photographic image and it corresponds to how large a photo can become without becoming unacceptably blurry or grainy.

How do I capture an image using OpenCV in Python?

Use cv2. VideoCapture( ) to get a video capture object for the camera. Set up an infinite while loop and use the read() method to read the frames using the above created object. Use cv2.


2 Answers

I'm using openCV 1.1pre1 under Windows (videoinput library is used by default by this version of openCv under windows).

With these instructions I can set camera resolution. Note that I call the old cvCreateCameraCapture instead of cvCaptureFromCam.

capture = cvCreateCameraCapture(cameraIndex);  cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 640 );  cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 480 );   videoFrame = cvQueryFrame(capture); 

I've tested it with Logitech, Trust and Philips webcams

like image 50
Grifo Avatar answered Sep 19 '22 14:09

Grifo


There doesn't seem to be a solution. The resolution can be increased to 640x480 using this hack shared by lifebelt77. Here are the details reproduced:

Add to highgui.h:

#define CV_CAP_PROP_DIALOG_DISPLAY 8 #define CV_CAP_PROP_DIALOG_FORMAT 9 #define CV_CAP_PROP_DIALOG_SOURCE 10 #define CV_CAP_PROP_DIALOG_COMPRESSION 11 #define CV_CAP_PROP_FRAME_WIDTH_HEIGHT 12 

Add the function icvSetPropertyCAM_VFW to cvcap.cpp:

static int icvSetPropertyCAM_VFW( CvCaptureCAM_VFW* capture, int property_id, double value ) {     int result = -1;     CAPSTATUS capstat;     CAPTUREPARMS capparam;     BITMAPINFO btmp;      switch( property_id )     {         case CV_CAP_PROP_DIALOG_DISPLAY:             result = capDlgVideoDisplay(capture->capWnd);             //SendMessage(capture->capWnd,WM_CAP_DLG_VIDEODISPLAY,0,0);             break;          case CV_CAP_PROP_DIALOG_FORMAT:             result = capDlgVideoFormat(capture->capWnd);             //SendMessage(capture->capWnd,WM_CAP_DLG_VIDEOFORMAT,0,0);             break;          case CV_CAP_PROP_DIALOG_SOURCE:             result = capDlgVideoSource(capture->capWnd);             //SendMessage(capture->capWnd,WM_CAP_DLG_VIDEOSOURCE,0,0);             break;          case CV_CAP_PROP_DIALOG_COMPRESSION:             result = capDlgVideoCompression(capture->capWnd);             break;          case CV_CAP_PROP_FRAME_WIDTH_HEIGHT:             capGetVideoFormat(capture->capWnd, &btmp, sizeof(BITMAPINFO));             btmp.bmiHeader.biWidth = floor(value/1000);             btmp.bmiHeader.biHeight = value-floor(value/1000)*1000;             btmp.bmiHeader.biSizeImage = btmp.bmiHeader.biHeight *             btmp.bmiHeader.biWidth * btmp.bmiHeader.biPlanes *             btmp.bmiHeader.biBitCount / 8;             capSetVideoFormat(capture->capWnd, &btmp, sizeof(BITMAPINFO));             break;          default:             break;     }      return result; } 

and edit captureCAM_VFW_vtable as following:

static CvCaptureVTable captureCAM_VFW_vtable = { 6, (CvCaptureCloseFunc)icvCloseCAM_VFW, (CvCaptureGrabFrameFunc)icvGrabFrameCAM_VFW, (CvCaptureRetrieveFrameFunc)icvRetrieveFrameCAM_VFW, (CvCaptureGetPropertyFunc)icvGetPropertyCAM_VFW, (CvCaptureSetPropertyFunc)icvSetPropertyCAM_VFW, // was NULL (CvCaptureGetDescriptionFunc)0 }; 

Now rebuilt highgui.dll.

like image 22
Ashwin Nanjappa Avatar answered Sep 19 '22 14:09

Ashwin Nanjappa