Я создаю приложение для Android с использованием OpenCV для сравнения сходства изображений для обнаружения аномалий продуктов. Я уже пробовал операторы Canny, Sobel и Prewitt в Python, и Prewitt дал мне лучшие результаты в моем случае, поскольку продукт содержит несколько объектов. Теперь мне нужно сделать это в Android с помощью OpenCV для Android, но я не могу найти никаких документов, используя детектор края Prewitt на Android.
Я пробовал краевые детекторы Canny и Sobel на Android, но результаты разочаровывают.
Любая помощь будет оценена.
Edit:
Это результат оператора Prewitt в Python
https://i.imgur.com/RBAZgFj.png
И это результат оператора Canny в Python
https://i.imgur.com/I16mJ5i.png
Итак, как вы можете заметить, Prewitt более точен в моем случае.
Редактировать 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;
}
Затем я просто удалил GaussianBlur и вот результат
https://i.imgur.com/qYHAK6C.png