【问题标题】:setting opencv video to fullscreen android将opencv视频设置为全屏android
【发布时间】:2012-11-02 19:22:30
【问题描述】:

我正在尝试使用 opencv 将视频设置为全屏。输入来自相机。 它显示在中心的屏幕上,但不是全屏显示。 相关代码:

public class Sample3Native extends Activity implements CvCameraViewListener {
private static final String TAG = "OCVSample::Activity";

private Mat                    mRgba;
private Mat                    mGrayMat;
private Mat                    mFinalMat;

private CameraBridgeViewBase   mOpenCvCameraView;


private BaseLoaderCallback     mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                Log.i(TAG, "OpenCV loaded successfully");

                // Load native library after(!) OpenCV initialization
                System.loadLibrary("native_sample");




                mOpenCvCameraView.enableView();



            } break;
            default:
            {
                super.onManagerConnected(status);
            } break;
        }
    }
};

public Sample3Native() {
    Log.i(TAG, "Instantiated new " + this.getClass());
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    Log.i(TAG, "called onCreate");
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    setContentView(R.layout.tutorial3_surface_view);

    mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial4_activity_surface_view);
    mOpenCvCameraView.setCvCameraViewListener(this);


}

我尝试过使用:

//mOpenCvCameraView.setScaleX(0.8f);
                   // mOpenCvCameraView.setScaleY(0.4f);

                //mOpenCvCameraView.setMinimumHeight(800);
               // mOpenCvCameraView.setMinimumWidth(1000);

但它不起作用。

如何拉伸框架以填满整个屏幕?

【问题讨论】:

    标签: android video opencv fullscreen


    【解决方案1】:

    您可以获取可用分辨率列表或手动设置。

    如果您想获取可用尺寸列表并获得最佳相机尺寸。

       if (mOpenCvCameraView != null) {
            List<Size> sizes = mOpenCvCameraView.getSupportedPreviewSizes();
            int mFrameWidth = width;
            int mFrameHeight = height;
    
            // selecting optimal camera size
            {
    
                double minDiff = Double.MAX_VALUE;
                for (Size size : sizes) {
                    if (Math.abs(size.height - height) < minDiff) {
                        mFrameWidth = (int) size.width;
                        mFrameHeight = (int) size.height;
                        minDiff = Math.abs(size.height - height);
                    }
                }
            }
    
            mOpenCvCameraView.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, mFrameWidth);
            mOpenCvCameraView.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, mFrameHeight);
        }
    

    如果最佳相机尺寸不是全屏,很容易从列表中获得相机支持的大尺寸。

    其他选项是手动设置大小:

            mOpenCvCameraView.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, 1000);
            mOpenCvCameraView.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, 800);
    

    代码来源于人脸检测OpenCV 2.4.2版本。

    【讨论】:

    • 看起来可能 exept mOpenCvCameraView.set 给出警告 "The method set(int, int) is undefined for the type CameraBridgeViewBase" ,因此没有设置 CameraBridgeViewBase 对象的功能..
    • 好的,看起来样本在 OpenCV 2.4.3 中发生了变化,它使用了 CameraBridgeViewBase。我不知道该对象是如何工作的,但在文档here 中,connectCamera(width,height) 可能会起作用。但我不确定,试试看是否有效。
    • 其他选项是将 mOpenCvCameraView 声明为 VideoCapture 对象,而不是 CameraBridgeViewBase。
    • connectCamera() 的问题是它不可见“CameraBridgeViewBase 类型的方法 connectCamera(int, int) 不可见”我需要以其他方式定义 CameraBridgeViewBase 吗?
    • 从我在 OpenCV Answers 上看到的,这是一个错误。很抱歉,它没有帮助:(我希望他们能尽快解决这个问题。
    【解决方案2】:

    试试这个替换

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    

    onCreate 中的代码

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    

    【讨论】:

    • 不起作用,我也在 opencv 论坛中问过这个问题:answers.opencv.org/question/4170/…。现在的问题是CameraBridgeViewBase的“set”是未定义的。也许有人知道如何解决这个问题
    【解决方案3】:

    对于仍在寻找这个的任何人,我已经解决了这个问题(有点)。我似乎无法让它适用于 OpenCV v 2.4.3。我已经尝试了互联网上的所有内容。但是,在 OpenCV 2.4.3.2 中,他们添加了一种设置相机尺寸的方法

    disconnectCamera();
    mMaxHeight = //your desired height
    mMaxWidth = //your desired width
    connectCamera(mMaxWidth, mMaxHeight);
    

    查看 OpenCV 教程 5,特别是 SampleJavaCameraView -> setResolution 方法

    【讨论】:

      【解决方案4】:

      对于那些在这里谷歌并只想更改分辨率的人,

      mOpenCvCameraView.set(Highgui.CV_CAP_PROP_FRAME_WIDTH, 1000) 方法不起作用。

      尝试使用mOpenCvCameraView.setMaxFrameSize(640, 480);

      适用于OCV4Android2.4.5,教程2,混合处理。

      【讨论】:

        【解决方案5】:

        不是最好的解决方案,但你可以去AndroidManifest.xml并设置android:screenOrientation="landscape"

        这样,您无需将相机旋转 90º,但您的应用程序将始终处于横向模式。

        【讨论】:

          【解决方案6】:

          OpenCV 相机的自然相机方向是横向的,所以让你的活动像

          android:screenOrientation="landscape"

          并在活动中应用此主题

          <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
                  <!-- Customize your theme here. -->
                  ...
                  <item name="android:windowFullscreen">true</item>
                  <item name="android:windowContentOverlay">@null</item>
          </style> 
          

          这个技巧给你一个全屏相机。

          【讨论】:

            猜你喜欢
            • 2015-12-09
            • 1970-01-01
            • 2021-02-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-03-15
            • 1970-01-01
            相关资源
            最近更新 更多