我正在使用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;
}
然后我刚刚删除了高斯模糊,这就是结果