adaptivethreshold выдает ошибку (opencv, java)

Я пытаюсь сделать adaptiveThresholding на изображении, но это дает мне эту ошибку:

OpenCV Error: Assertion failed (src.type() == CV_8UC1) in adaptiveThreshold

Я не могу понять, почему, вот мой код:

         Mat source = Highgui.imread("camera.jpg", 
         Highgui.CV_LOAD_IMAGE_COLOR);

         Mat destination = new Mat(source.rows(),source.cols(),source.type());

         Imgproc.cvtColor(source, destination, Imgproc.COLOR_RGB2GRAY);

         Highgui.imwrite("grayscale.jpg", destination);

         Mat source2 = Highgui.imread("grayscale.jpg", 
         Highgui.CV_LOAD_IMAGE_COLOR);

         Mat destination2 = new Mat(source.rows(),source.cols(),source.type());

         Imgproc.adaptiveThreshold(source2, destination2, 255,
         Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 15, 4);

1 ответ

Решение

Для адаптивного порога источником должно быть 8-битное одноканальное изображение, но вы загружаете source2 как цвет,

Итак, измените строку

 Mat source2 = Highgui.imread("grayscale.jpg", Highgui.CV_LOAD_IMAGE_COLOR);

в

 Mat source2 = Highgui.imread("grayscale.jpg", Highgui.CV_LOAD_IMAGE_GRAYSCALE);

Также зачем сохранять и загружать destination изображение перед adaptiveThreshold, передайте его непосредственно adaptiveThreshold()

Другие вопросы по тегам