欢迎访问宙启技术站
智能推送

Android OpenCv4如何绘制多边形

发布时间:2023-05-14 07:16:10

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。