我有一个简单的项目,只是用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 举报,一经查实,本站将立刻删除。