21xrx.com
2025-06-15 00:18:44 Sunday
文章检索 我的文章 写文章
如何在安卓上使用OpenCV实现图片旋转操作
2023-11-06 00:16:38 深夜i     11     0
安卓 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库实现图片旋转操作。希望本文能够帮助您顺利完成相应任务。

  
  

评论区