android – OpenCV摄像头导向问题

前端之家收集整理的这篇文章主要介绍了android – OpenCV摄像头导向问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的项目,只是用org.opencv. android. JavaCameraView显示相机.

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

这是我的代码的一部分:

XML代码

  1. <LinearLayout
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent" >
  4.  
  5. <org.opencv.android.JavaCameraView
  6. android:layout_width="fill_parent"
  7. android:layout_height="300dp"
  8. android:visibility="gone"
  9. android:id="@+id/HelloOpenCvView"
  10. opencv:show_fps="true"
  11. opencv:camera_id="1" />
  12.  
  13.  
  14. </LinearLayout>
  15.  
  16. <LinearLayout
  17. android:layout_width="match_parent"
  18. android:layout_height="wrap_content" >
  19.  
  20.  
  21. <Button
  22. android:id="@+id/BtnVideo"
  23. android:layout_marginLeft="2dp"
  24. android:layout_marginRight="2dp"
  25. android:layout_width="0dp"
  26. style="@style/button"
  27. android:layout_height="wrap_content"
  28. android:layout_weight="1.00"
  29. android:text="@string/videoBtn"
  30. android:textSize="18dip" />
  31.  
  32.  
  33. </LinearLayout>

Java代码

  1. CameraBridgeViewBase mOpenCvCameraView;
  2. Button VideoButton;
  3. protected void onCreate(Bundle savedInstanceState) {
  4.  
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. overridePendingTransition(0,0);
  8.  
  9. VideoButton = (Button) this.findViewById(R.id.BtnVideo);
  10.  
  11. VideoButton.setOnClickListener(onClickListener);
  12.  
  13. mOpenCvCameraView= (CameraBridgeViewBase) findViewById(R.id.HelloOpenCvView);
  14. mOpenCvCameraView.setVisibility(SurfaceView.INVISIBLE);
  15.  
  16. }
  17.  
  18. private OnClickListener onClickListener = new OnClickListener() {
  19.  
  20. @Override
  21. public void onClick(View v) {
  22. switch (v.getId()){
  23.  
  24. case R.id.BtnVideo:
  25. if(mOpenCvCameraView.getVisibility() == SurfaceView.VISIBLE)
  26. {
  27. mOpenCvCameraView.setVisibility(SurfaceView.INVISIBLE);
  28. }
  29. else
  30. {
  31. mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
  32. }
  33.  
  34. break;
  35. default :
  36. break;
  37. }
  38.  
  39. }
  40. };
  41.  
  42.  
  43. public void onResume() {
  44. super.onResume();
  45. overridePendingTransition(0,0);
  46. OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3,this,mLoaderCallback);
  47. }
  48. public void onPause()
  49. {
  50. super.onPause();
  51. if (mOpenCvCameraView != null)
  52. mOpenCvCameraView.disableView();
  53. }
  54. public void onDestroy() {
  55. super.onDestroy();
  56. if (mOpenCvCameraView != null)
  57. mOpenCvCameraView.disableView();
  58. }
  59. public void onCameraViewStarted(int width,int height) {
  60. }
  61.  
  62. public void onCameraViewStopped() {
  63. }
  64. public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
  65. return inputFrame.rgba();
  66. }
  67.  
  68. private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
  69. @Override
  70. public void onManagerConnected(int status) {
  71. switch (status) {
  72. case LoaderCallbackInterface.SUCCESS:
  73. {
  74. //Log.i(TAG,"OpenCV loaded successfully");
  75. mOpenCvCameraView.enableView();
  76. } break;
  77. default:
  78. {
  79. super.onManagerConnected(status);
  80. } break;
  81. }
  82. }
  83. };

那么如何更改默认方向?

谢谢!

解决方法

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

首先我进入OpenCV库中的JavaCameraView.Java类 – 2.4.5

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

  1. setDisplayOrientation(mCamera,90);
  2. mCamera.setPreviewDisplay(getHolder());

第一个功能如下:

  1. protected void setDisplayOrientation(Camera camera,int angle){
  2. Method downPolymorphic;
  3. try
  4. {
  5. downPolymorphic = camera.getClass().getMethod("setDisplayOrientation",new Class[] { int.class });
  6. if (downPolymorphic != null)
  7. downPolymorphic.invoke(camera,new Object[] { angle });
  8. }
  9. catch (Exception e1)
  10. {
  11. }
  12. }

我只是提醒我使用OpenCV.

希望这个有帮助的人

猜你在找的Android相关文章