android – OpenCV摄像头导向问题

我有一个简单的项目,只是用org.opencv. android. JavaCameraview显示相机.

我的问题是,在认情况下,相机是在横向模式,我不能改变这个原因,我需要定义CameraBridgeViewBase而不是一般的相机意图.

这是我的代码的一部分:

XML代码

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <org.opencv.android.JavaCameraview
                android:layout_width="fill_parent"
                android:layout_height="300dp"
                android:visibility="gone"
                android:id="@+id/HelloOpenCvView"
                opencv:show_fps="true"
                opencv:camera_id="1" />


        </LinearLayout>  

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >


            <Button
                android:id="@+id/BtnVideo"
                android:layout_marginLeft="2dp"
                android:layout_marginRight="2dp"                    
                android:layout_width="0dp"
                style="@style/button"
                android:layout_height="wrap_content"
                android:layout_weight="1.00"
                android:text="@string/videoBtn"
                android:textSize="18dip" />


        </LinearLayout>

Java代码

CameraBridgeViewBase mOpenCvCameraview;
    Button VideoButton;
 protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        overridePendingTransition(0,0);

        VideoButton = (Button) this.findViewById(R.id.BtnVideo);

        VideoButton.setonClickListener(onClickListener);

        mOpenCvCameraview= (CameraBridgeViewBase) findViewById(R.id.HelloOpenCvView);
        mOpenCvCameraview.setVisibility(SurfaceView.INVISIBLE);

    } 

        private OnClickListener onClickListener = new OnClickListener() {

            @Override
            public void onClick(View v) {
                    switch (v.getId()){

                        case R.id.BtnVideo:
                            if(mOpenCvCameraview.getVisibility() == SurfaceView.VISIBLE)
                            {
                                mOpenCvCameraview.setVisibility(SurfaceView.INVISIBLE);
                            }
                            else
                            {
                                mOpenCvCameraview.setVisibility(SurfaceView.VISIBLE);
                            }

                            break;
                        default :
                            break;
                    }

            }
        };


        public void onResume() {
            super.onResume();
            overridePendingTransition(0,0);
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3,this,mloaderCallback);
        }
         public void onPause()
         {
             super.onPause();
             if (mOpenCvCameraview != null)
                 mOpenCvCameraview.disableView();
         }
         public void onDestroy() {
             super.onDestroy();
             if (mOpenCvCameraview != null)
                 mOpenCvCameraview.disableView();
         }
         public void onCameraviewStarted(int width,int height) {
         }

         public void onCameraviewStopped() {
         }
         public Mat onCameraFrame(CvCameraviewFrame inputFrame) {
             return inputFrame.rgba();
         }

        private BaseLoaderCallback mloaderCallback = new BaseLoaderCallback(this) {
            @Override
            public void onManagerConnected(int status) {
                switch (status) {
                    case LoaderCallbackInterface.SUCCESS:
                    {
                        //Log.i(TAG,"OpenCV loaded successfully");
                        mOpenCvCameraview.enableView();
                    } break;
                    default:
                    {
                        super.onManagerConnected(status);
                    } break;
                }
            }
        };

那么如何更改认方向?

谢谢!

解决方法

好的,我发现这是一个解决方案:

首先我进入OpenCV库中的JavaCameraview.java类 – 2.4.5

然后在mCamera.startPreview()之前的initializeCamera函数中;我添加了这个2功能

setdisplayOrientation(mCamera,90);
            mCamera.setPreviewdisplay(getHolder());

一个功能如下:

protected void setdisplayOrientation(Camera camera,int angle){
    Method downpolymorphic;
    try
    {
        downpolymorphic = camera.getClass().getmethod("setdisplayOrientation",new Class[] { int.class });
        if (downpolymorphic != null)
            downpolymorphic.invoke(camera,new Object[] { angle });
    }
    catch (Exception e1)
    {
    }
}

我只是提醒我使用OpenCV.

希望这个有帮助的人

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...