OpenCV - 用Java改变相机分辨率

时间:2014-01-11 18:39:41

标签: java opencv camera resolution

似乎在Java opencv中设置网络摄像头分辨率的标准方法不起作用。我做了以下事情:

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

打印哪些:

> false
> false

...并且不会改变相机分辨率。它似乎停留在640x480。我知道相机没有故障,因为我可以使用C ++绑定成功地将分辨率设置为1280x800。

此外 - v.getSupportedPreviewSizes()不起作用。它返回一个错误:

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

有什么想法吗?

5 个答案:

答案 0 :(得分:4)

您需要先打开相机然后再进行设置。我在camera.open(0)之前尝试了它,它只返回标准设置,但是当在camera.open(0)之后尝试设置时,它可以工作。

在你的代码中这样做

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

答案 1 :(得分:1)

如果您想让相机运行,首先需要打开捕获设备:

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

并且v.getSupportedPreviewSizes()无法使用此代码:

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

答案 2 :(得分:1)

只需使用构造函数传递摄像机编号并设置宽度和高度......

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

你去.... [/ p>

答案 3 :(得分:0)

而是使用Highgui来设置分辨率,使用属性ID,其中3是WIDTH,4是HEIGHT,所以你的代码将是:

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

您可以在Setting Camera Parameters in OpenCV/Python

找到其他属性ID

答案 4 :(得分:0)

在新的OpenCV 4.5上,您应使用类似以下内容的内容:

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