2015-12-27 2 views
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()?

ответ

1

Ничего, я понял. По-видимому, вы должны позвонить:

Imgproc.cvtColor(t, t, Imgproc.COLOR_BGR2GRAY); 

перед тем, как сделать ставку.

 Смежные вопросы

  • Нет связанных вопросов^_^