Reputation: 724
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
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
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
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
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
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