如何在Android Studio中使用openCV执行Prewitt Edge Detection?

时间:2019-01-22 14:04:26

标签: java android opencv image-processing opencv4android

我正在使用OpenCV创建一个Android应用程序,以比较图像相似性以检测产品异常。我已经在Python中尝试过Canny,Sobel和Prewitt运算符,Prewitt在我的案例中给了我最好的结果,因为该产品包含多个对象。现在,我需要使用适用于Android的OpenCV在Android中进行此操作,但使用Android上的Prewitt边缘检测器找不到任何文档。

我在Android上尝试了Canny和Sobel边缘检测器,但结果令人失望。 任何帮助将不胜感激。

编辑: 这是Python中Prewitt运算符的结果

https://i.imgur.com/RBAZgFj.png

这是Python中Canny运算符的结果

https://i.imgur.com/I16mJ5i.png

因此,您可以注意到,就我而言,普威特更为准确。

编辑2: 我对Java代码进行了一些更改,然后将新的输出和代码链接到

https://i.imgur.com/LMeFvNK.png

    @Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {

    //rgbImage = inputFrame.rgba();

   // return findLargestRectangle(rgbImage);

    mat = inputFrame.rgba();
    Mat mRgbaT = mat.t();
    Core.flip(mat.t(), mRgbaT, 1);
    Imgproc.resize(mRgbaT, mRgbaT, mat.size());
    Imgproc.cvtColor(mRgbaT, gray, Imgproc.COLOR_BGR2GRAY);
    Imgproc.equalizeHist(gray, gray);
    //Imgproc.threshold(gray, gray, 127.5, 255.0, Imgproc.THRESH_OTSU);
    Imgproc.adaptiveThreshold(gray, gray, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 15, 40);
   // Imgproc.Canny(gray, cannyImg, 50, 80);
   // Imgproc.Canny(gray, cannyImg, 50, 200, 3, false);


    Imgproc.GaussianBlur(gray, gray, new Size(5, 5), 5);
    final Point anchor = new Point(-1, -1);
    final int iterations = 2;
    Imgproc.erode(gray, cannyImg, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3)), anchor, iterations);
   // Imgproc.dilate(gray, cannyImg, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3)), anchor, iterations);
    Imgproc.Canny(gray, cannyImg, 50, 200, 3, false);
    return cannyImg;

}

然后我刚刚删除了高斯模糊,这就是结果

https://i.imgur.com/qYHAK6C.png

0 个答案:

没有答案