0
Когда я запускаю следующий код:Метод convertTo() для Mat не работает должным образом?
Mat i = Imgcodecs.imread(inFile);
Mat image = new Mat(i.rows(), i.cols(), CvType.CV_8U);
i.convertTo(image, CvType.CV_8U, 1.0/255);
System.out.println(image.type() + ", " + CvType.CV_8U);
Mat t = Imgcodecs.imread(templateFile);
Imgproc.Canny(t, t, 50, 200);
Mat template = new Mat(t.rows(), t.cols(), CvType.CV_8U);
t.convertTo(template, CvType.CV_8U, 1.0/255);
System.out.println(template.type() + ", " + CvType.CV_8U);
System.out.println((image.depth() == CvType.CV_8U) + ", " + (image.type() == template.type()) + ", " + image.dims());
int result_cols = image.cols() - template.cols() + 1;
int result_rows = image.rows() - template.rows() + 1;
Mat result = new Mat(result_rows, result_cols, CvType.CV_32FC1);
Imgproc.matchTemplate(image, template, result, match_method);
я получаю следующие выходные и ошибки во время выполнения на линии с matchTemplate():
16, 0
0, 0
true, false, 2
OpenCV Error: Assertion failed ((depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2) in matchTemplate, file /Users/rajs/Vision/opencv/modules/imgproc/src/templmatch.cpp, line 1062
Exception in thread "AWT-EventQueue-0" CvException [org.opencv.core.CvException: cv::Exception: /Users/rajs/Vision/opencv/modules/imgproc/src/templmatch.cpp:1062: error: (-215) (depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2 in function matchTemplate
Как видно из вывода, причина, почему boolean statement не работает, это связано с тем, что шаблон не совпадает с типом шаблона. Но почему они не совпадают после вызова метода convertTo()?