21xrx.com
2024-11-22 01:24:44 Friday
登录
文章检索 我的文章 写文章
如何在安卓上使用OpenCV实现图片旋转操作
2023-11-06 00:16:38 深夜i     --     --
安卓 OpenCV 图片旋转 实现 操作

在安卓上使用OpenCV库可以实现各种图像处理操作,例如图片的旋转。本文将介绍如何使用OpenCV在安卓设备上实现图片旋转操作。

首先,我们需要在安卓项目中集成OpenCV库。可以通过在项目的build.gradle文件中添加以下代码来完成集成:


dependencies {

  implementation project(':opencv')

}

接下来,在项目的AndroidManifest.xml文件中添加以下权限:


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-feature android:name="android.hardware.camera"/>

然后,在MainActivity.java文件中加载OpenCV库:


import org.opencv.android.OpenCVLoader;

public class MainActivity extends AppCompatActivity implements LoaderCallbackInterface{

  static {

    if (!OpenCVLoader.initDebug())

      // Handle initialization error

    

  }

  @Override

  protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    if (!OpenCVLoader.initDebug()) {

      OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, this, this);

    } else {

      // OpenCV library is already loaded

      onManagerConnected(LoaderCallbackInterface.SUCCESS);

    }

  }

  @Override

  public void onManagerConnected(int status) {

    if (status == LoaderCallbackInterface.SUCCESS)

      // OpenCV library is loaded successfully

     else {

      super.onManagerConnected(status);

    }

  }

  @Override

  public void onPackageInstall(int operation, InstallCallbackInterface callback)

    // Handle package installation

  

}

接下来,我们将在MainActivity的onCreate方法中编写代码来进行图片旋转操作。首先,我们需要获取要旋转的图片的路径。可以通过添加一个按钮并使用以下代码来打开图片选择器选择图片:


Button btnSelectImage = findViewById(R.id.btnSelectImage);

btnSelectImage.setOnClickListener(new View.OnClickListener() {

  @Override

  public void onClick(View v) {

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

    intent.setType("image/*");

    startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);

  }

});

然后,在onActivityResult方法中获取选择的图片的路径,并使用以下代码进行图片旋转操作:


@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  super.onActivityResult(requestCode, resultCode, data);

  if (resultCode == RESULT_OK) {

    if (requestCode == SELECT_PICTURE) {

      Uri selectedImageUri = data.getData();

      String selectedImagePath = getPath(selectedImageUri);

      Mat src = Imgcodecs.imread(selectedImagePath);

      Mat dst = new Mat();

      // Rotate the image by 90 degrees counterclockwise

      Core.rotate(src, dst, Core.ROTATE_90_COUNTERCLOCKWISE);

      // Save the rotated image

      Imgcodecs.imwrite(selectedImagePath, dst);

    }

  }

}

private String getPath(Uri uri) {

  String[] projection = { MediaStore.Images.Media.DATA };

  Cursor cursor = getContentResolver().query(uri, projection, null, null, null);

  int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

  cursor.moveToFirst();

  String imagePath = cursor.getString(columnIndex);

  cursor.close();

  return imagePath;

}

以上代码将选择的图片加载到OpenCV的Mat对象中,并使用Core.rotate方法对图片进行旋转操作。最后,使用Imgcodecs.imwrite方法将旋转后的图片保存。

通过以上步骤,我们可以在安卓设备上使用OpenCV库实现图片旋转操作。希望本文能够帮助您顺利完成相应任务。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复