Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenCV - changing camera resolution in Java

It seems that the standard method for setting the resolution on a webcam in Java opencv doesn't work. I do the following:

VideoCapture v = new VideoCapture();

boolean wset = v.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, 1280);
boolean hset = v.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, 800);

System.out.println(wset);
System.out.println(hset);

v.open(1);

Which prints:

> false
> false

...and doesn't change the camera resolution. It appears to be stuck at 640x480. I know that the camera is not at fault because I can successfully set the resolution to 1280x800 using the C++ bindings.

Also - v.getSupportedPreviewSizes() doesn't work. It returns an error:

HIGHGUI ERROR: V4L2: getting property #1025 is not supported

Any thoughts?

like image 365
mayhewsw Avatar asked Jan 11 '14 18:01

mayhewsw


4 Answers

You need to open the camera first then set it. I tried it before camera.open(0) and it just returns to standard settings, but when try setting after camera.open(0) it works.

so do this in your code

v.open(1)
boolean wset = v.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, 1280);
boolean hset = v.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, 800);
like image 106
Dave P Avatar answered Oct 13 '22 03:10

Dave P


If you want your camera to run, You first need to open your capture device:

    VideoCapture v = new VideoCapture(0); 

//add 0 as paramater in the constructor.This is the index of your capture device.

    boolean wset = v.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, 1280);
    boolean hset = v.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, 800);

    System.out.println(wset);
    System.out.println(hset);

And v.getSupportedPreviewSizes() doesnt work use this instead:

v.get(Highgui.CV_CAP_PROP_FRAME_WIDTH); //to get the actual width of the camera
v.get(Highgui.CV_CAP_PROP_FRAME_HEIGHT);//to get the actual height of the camera
like image 37
neoprez Avatar answered Oct 13 '22 03:10

neoprez


Just pass camera number with the constructor and set width and height...

webCamera = new VideoCapture(0);
webCamera.set(Highgui.CV_CAP_PROP_FRAME_WIDTH,1280);
webCamera.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, 720);

There you go....

like image 2
Gopal00005 Avatar answered Oct 13 '22 03:10

Gopal00005


Instead use Highgui to set resolution, use property ID, where 3 is to WIDTH and 4 is to HEIGHT, so your code will be like:

VideoCapture v = new VideoCapture();
boolean wset = v.set(3, RESOLUTION_WIDTH);
boolean hset = v.set(4, RESOLUTION_HEIGHT);

System.out.println(wset);
System.out.println(hset);

v.open(cameraID);

Other property ids you can find at Setting Camera Parameters in OpenCV/Python

like image 1
Rodrigo Moraes Avatar answered Oct 13 '22 04:10

Rodrigo Moraes