Android OpenCv4如何绘制多边形
OpenCV(开发策略和领域导向计算机视觉库)是一款计算机视觉库,其中包含许多用于处理图像和视频的功能。与其他早期的计算机视觉库一样,OpenCV 提供了一些用于在图像上绘制各种形状的函数,其中包括绘制多边形。由于 Android 大多数应用程序与相机或图像处理有关,因此 OpenCV 在 Android 平台上被广泛使用。本文将讨论在 Android 平台上使用 OpenCV4 绘制多边形的方法。
步骤 1:创建项目
创建新项目时,请确保选择包括 OpenCV 的项目模板。如果 OpenCV 未包含在项目中,您需要下载 OpenCV SDK 并将其导入到您的项目中。
步骤 2:导入 OpenCV 库
将 OpenCV 库添加到您的项目中:
对于 Android Studio,请转到 "File"->"New"->"Import Module"->找到您的 OpenCV SDK 目录->选择 OpenCV-android-sdk/sdk/java 目录(假设您已经安装了 OpenCV 3.0+)。
步骤 3:更改 Gradle 中的 OpenCV 依赖项
在 Gradle 中添加以下行以使用 OpenCV:
- implementation project(':opencv')
- task nativeLibsToJar(type: Zip) {
- from fileTree(dir: 'libs', include: '*.so')
- into 'libs'
- }
步骤 4:添加一个画布
在活动 xml 中添加一个 SurfaceView 以便我们创建画布。
<SurfaceView
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
步骤 5:创建一个绘制多边形的类
创建一个类来执行所有绘图操作。我们将在此类中使用 OpenCV 绘制多边形。
public class OpenCvDrawPolygon {
public Bitmap drawPolygon(Bitmap inputBitmap) {
Mat srcMat = new Mat();
Bitmap bmp32 = inputBitmap.copy(Bitmap.Config.ARGB_8888, true);
Utils.bitmapToMat(bmp32, srcMat);
Imgproc.cvtColor(srcMat, srcMat, Imgproc.COLOR_BGR2GRAY);
Imgproc.Canny(srcMat, srcMat, 50, 200);
Mat hierachy = new Mat();
List<MatOfPoint> contours = new ArrayList<>();
Imgproc.findContours(srcMat, contours, hierachy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);
Imgproc.drawContours(srcMat, contours, -1, new Scalar(255, 0, 0), 3);
Bitmap bmpOut = Bitmap.createBitmap(bmp32.getWidth(), bmp32.getHeight(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(srcMat, bmpOut);
return bmpOut;
}
}
这个类中包含了如下方法:
- drawPolygon(Bitmap inputBitmap)方法:在给定的 Bitmap 上绘制多边形,返回新的 Bitmap。
下面是我们已经使用 OpenCV 绘制出的多边形:
步骤 6:在 MainActivity 中使用 OpenCvDrawPolygon 类
现在我们已经有了可以绘制多边形的类,接下来让我们来在活动中使用这个类。
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SurfaceView surfaceView = findViewById(R.id.surface_view);
imageView = findViewById(R.id.image_view);
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(@NonNull SurfaceHolder surfaceHolder) {
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder surfaceHolder) {
}
});
}
private void drawPolygons() {
Bitmap inputBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test_image);
OpenCvDrawPolygon openCvDrawPolygon = new OpenCvDrawPolygon();
Bitmap outputBitmap = openCvDrawPolygon.drawPolygon(inputBitmap);
imageView.setImageBitmap(outputBitmap);
}
}
现在,我们可以在 Activity 的 onCreate() 函数中调用 drawPolygons() 方法,这将对指定的图像绘制多边形并显示在 ImageView 中。
总结
在本文中,我们步骤地解释了如何使用 OpenCV 在 Android 上绘制多边形。我们首先创建了一个类,该类的任务是绘制多边形,接着在 Activity 中使用了此类来绘制一些多边形。要注意的一点是,OpenCV 对于图像处理和计算机视觉任务是非常强大的,因此,如果您在 Android 上进行此类任务,可以考虑使用 OpenCV。
