如何在Android中使用Opencv在图像上应用Canny边缘检测器?

时间:2019-01-23 10:03:19

标签: java android opencv image-processing opencv4android

我正在制作一个Android应用程序,以从图像中检测多个对象,然后处理这些对象并将它们与参考对象进行比较以检测异常。 我在python中测试了不同的图像边缘检测器,Prewitt运算符为我提供了最佳结果,如下所示 https://i.imgur.com/4iwOx9s.png 对于android系统,我使用了Canny边缘检测器,但结果不如Prewitt所示,如下所示 https://i.imgur.com/C841Qup.png

这是我尝试过的Java代码

    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.coffret);

        //compress bitmap
        bmp = getResizedBitmap(bmp, 500);

        Mat rgbMat = new Mat();
        Utils.bitmapToMat(bmp, rgbMat);


        Mat grayMat = new Mat();
        Mat bwMat = new Mat();

        Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);
        Imgproc.equalizeHist(grayMat, grayMat);

        Imgproc.adaptiveThreshold(grayMat, grayMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 15, 40);
        Imgproc.Canny(grayMat, bwMat, 50, 200, 3, false);

        Utils.matToBitmap(bwMat, bmp);

        Matrix matrix = new Matrix();
        matrix.postRotate(180);

        bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);

        imgView.setImageBitmap(bmp);

您会注意到,使用Prewitt运算符可以使文本清晰且轮廓更清晰。 我在做什么错了?

0 个答案:

没有答案