mayhewsw
mayhewsw

Reputation: 724

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?

Upvotes: 5

Views: 9225

Answers (5)

ariel
ariel

Reputation: 373

On the new OpenCV 4.5 you should use something like:

import org.opencv.videoio.Videoio;
...
this.capture.set(Videoio.CAP_PROP_FRAME_WIDTH, 640);
this.capture.set(Videoio.CAP_PROP_FRAME_HEIGHT, 480);

Upvotes: 1

Rodrigo Moraes
Rodrigo Moraes

Reputation: 178

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

Upvotes: 1

Gopal00005
Gopal00005

Reputation: 2151

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....

Upvotes: 2

Dave P
Dave P

Reputation: 156

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);

Upvotes: 5

neoprez
neoprez

Reputation: 349

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

Upvotes: 2

Related Questions