Hello
opencv community, I hope you all doing well.
I have a pretty strange behaviour using the 4.5.5 version on Android, let me explain.
My goal is to create a document scanner, therefor I am doing :
Mat src = Imgcodecs.imread(uri);
Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2GRAY, DST_CN);
Imgproc.GaussianBlur(dst, dst, BLUR_SIZE, BLUR_SIGMA_X);
Imgproc.Canny(dst, dstCanned, MIN_THRESH, MAX_THRESH);
ArrayList<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(dstCanned, contours, hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);
logger.info(contours.size()); // 4319
But if I do this
String uri = "myUri";
String dstUri = "myDstUri";
Mat src = Imgcodecs.imread(uri);
Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2GRAY, DST_CN);
Imgproc.GaussianBlur(dst, dst, BLUR_SIZE, BLUR_SIGMA_X);
Imgproc.Canny(dst, dstCanned, MIN_THRESH, MAX_THRESH);
// save canny
Imgcodecs.imwrite(dstUri, dstCanned);
dstCanned.release();
dstCanned = Imgcodecs.imread(dstUri, CvType.CV_8UC1);
ArrayList<MatOfPoint> contours = new ArrayList<>();
Mat hierarchy = new Mat();
Imgproc.findContours(dstCanned, contours, hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);
logger.info(contours.size()); // 74421
Of course it’s the same image. It’s pretty strange, I must save the canny image before the findContour to have a better detection. I implemented this algo in c++ and objective-c and everything goes well ![]()
And btw in ios for the same image it take .600s to process and in android 6s ![]()
Any advise will be very appreciated, thank’s to everyone for your time ![]()