OpenCV-在Java中更改相机分辨率

OpenCV-在Java中更改相机分辨率,java,opencv,camera,resolution,Java,Opencv,Camera,Resolution,在JavaOpenCV中设置网络摄像头分辨率的标准方法似乎不起作用。我做了以下工作: 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(h

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

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

有什么想法吗?

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

    VideoCapture v = new VideoCapture(0); 
//在构造函数中添加0作为参数。这是捕获设备的索引。

    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

你需要先打开相机,然后再进行设置。我在相机之前尝试过。打开(0)它会返回到标准设置,但在相机之后尝试设置。打开(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);

只需将相机编号传递给构造器并设置宽度和高度

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

好了……

使用Highgui设置分辨率,使用属性ID,其中3表示宽度,4表示高度,因此您的代码如下所示:

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

在新的OpenCV 4.5上,您可以在

找到其他属性ID,您应该使用以下内容:

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

哦,我已经能够看到视频了-我只是没有标记那一步。我会编辑它。问题仍然存在。另外,每次我执行
v.get(…)
时,它返回640和480,而不管我将其设置为什么。