微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

希望这个有帮助的人

原文地址:https://www.jb51.cc/android/310937.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐