提问人:Ani 提问时间:11/10/2023 最后编辑:Ani 更新时间:11/10/2023 访问量:72
提高 OpenCV 中相机的分辨率
increase resolution for camera in opencv
问:
我有一台 13MP 摄像头的设备,我的默认摄像头分辨率是 1280x720,因为 13MP 摄像头可以提供比 1280x720 更高的分辨率,我想把它提高到我的默认值吗?
我试图检查我的设备是否支持更大的分辨率,我得到的输出为:4224x3136,4096x3072,1920x1088,4096x3072,1920x1088,1920x1080,1280x720,720x480,640x480,352x288,320x240,176x144,我的设备的视图大小是1280x800,大多数文章和帖子都说opencv将相机分辨率限制为viewSize?
有人可以帮忙如何覆盖它并提高相机的分辨率吗?chameraCharacteristics, SCALER_STREAM_CONFIGURATION_MAP
谢谢。
答:
0赞
Greenylie
11/10/2023
#1
打开相机后,您应该能够使用 VideoCapture 的设置方法编辑您喜欢的属性:
VideoCapture camera = new VideoCapture(0); //0 is there to avoid camera.open(0)
boolean setWidth = camera.set(3, 4096); //CAP_PROP_FRAME_WIDTH = 3
boolean setHeigth = camera.set(4, 3072); //CAP_PROP_FRAME_HEIGHT = 4
如链接页面所述,set 方法返回
如果 VideoCapture 实例使用的后端支持该属性,则为 true。注意:即使返回 true,也不能确保捕获设备已接受属性值。
您可以在 org.opencv.videoio.Videoio 中找到所有属性的标志/ID
评论
0赞
Dan Mašek
11/10/2023
为什么要在注释中加入,而不是直接在代码中使用命名常量而不是那些幻数?这是一个可怕的榜样。CAP_PROP_FRAME_WIDTH
0赞
Greenylie
11/10/2023
@DanMašek,这只是快速复制粘贴的尝试,不知道库的哪些部分已经在项目中。这些评论是出于这个特殊的原因,不要疯狂地追逐神奇的数字。我将文档与所有标志链接起来,以正确实现所需的内容。但是我很欣赏这个提示,我仍在学习,这是我的第一个答案之一。
0赞
Ani
11/14/2023
我尝试使用 VideoCapture 并将值设置为我想要的分辨率,但是当我尝试打印 setWidth 和 setHeight 时,检查是否设置了值,它返回“false”值“,我确信我的相机可以支持这个分辨率!如果我在这里遗漏了什么,你能帮忙吗?我是新打开简历相机!也参考了一些其他videoCapture解决方案以找到解决方案,但这些解决方案对我不起作用!
0赞
Greenylie
11/14/2023
@Ani 由于返回值为 false,因此后端不支持该解析。如果我没记错的话,cv2 默认使用 MSMF,所以请尝试将 VideoCapture 更改为 this,看看这是否改变了什么。VideoCapture camera = new VideoCapture(0,Videoio.CAP_DSHOW);
1赞
Ani
11/15/2023
所以我正在 13MP 设备上进行测试,但我没有在我的应用程序中捕获任何视频,我的应用程序仅支持点击图像,并且我正在尝试提高相机捕获的图像的分辨率!您能否澄清一下 VideoCapture 是否也支持提高图像和视频的分辨率?
评论
v4l2-ctl -d0 --list-formats-ext