在OpenCV Java中,CameraBridgeViewBase类的setMaxFrameSize方法究竟是做什么的?

3

我目前在一个安卓应用程序中使用CameraBridgeViewBase类的setMaxFrameSize方法来降低我的主摄像头捕获的帧率。在我的使用情况下,我需要非常低的分辨率,因为需要良好的性能。我想知道这个方法是否只调整输出帧,而不是由不同滤镜修改的内部捕获帧。

所以我的问题是:这个方法是否立即获取捕获的帧并对其进行修改,以便整个处理过程都使用修改后的帧,还是仅在显示之前修改帧?

你能告诉我在哪里可以找到这个问题的答案,或者你是在哪里找到的答案吗?

这是一个简单的示例:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    javaCameraView =(JavaCameraView) findViewById(R.id.java_camera_view);
    javaCameraView.setMaxFrameSize(240, 180);
    javaCameraView.setVisibility(SurfaceView.VISIBLE);
    javaCameraView.enableFpsMeter();
    javaCameraView.setCvCameraViewListener(this);
}

1
欢迎!请在您的问题中包含一个最小、完整和可验证的示例。干杯! - Rich Churcher
如果你想在你的应用程序中获得良好的性能,opencv相机不是你应该使用的东西。 - Dmitrii Z.
@DmitriiZ。你会用什么代替? - Pm740
@RichChurcher 谢谢! :) 像这样? - Pm740
@Pm740 原生安卓相机 + GLES 渲染帧。 - Dmitrii Z.
1个回答

1

setMaxFrameSize() 用于从设备特定列表中查找最佳预览帧分辨率 (由 Camera.getSupportedPreviewSizes() 返回)。

例如 - 我们设置 setMaxFrameSize(200,200),我们有176x152和320x240大小。预览帧将选择176x152大小。

如果您的尺寸太小,JavaCameraView 将尝试设置预览大小为(0,0),在大多数设备上它会失败。


那么预览分辨率是显示在屏幕上的分辨率,而不是我在显示处理后的图像之前使用的分辨率? - Pm740
1
不,这正是您从相机获得的分辨率。您不会多得到一个像素(或少)。对于显示,图片可能会被缩放以适应“窗口”。但是,您的onCameraFrame()回调函数获取的inputFrame宽度和高度不允许超过您选择的MaxFrameSize(宽度-240,高度-180)。 - Alex Cohn
那么,一个180p的预览框应该比720p的表现更好,对吧? - Pm740

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接