OpenCV distanceTransform возвращает неожиданные результаты (пустой мат или исходное изображение) - PullRequest
1 голос
/ 01 ноября 2011

Я не могу успешно рассчитать преобразование расстояния, используя OpenCV (2.3) в Ubuntu.Вывод будет либо черным, либо копией оригинального изображения, но никогда, как и ожидалось, не будет черно-белого изображения с градиентами.

Мой код:

Mat input(Size(100,100), CV_8UC1);
circle(input, Point(50,50), 10 Scalar(255,255,255), 15, 0, 0));

Mat output(Size(100,100), CV_32FC1);
distanceTransformation(input, output, CV_DIST_L2, CV_DIST_MASK_3); //Output is completely black
//distanceTransformation(input, output, CV_DIST_L2, CV_DIST_MASK_PRECISE); //Output is a "copy" of input


imshow("in", input);
imshow("out", output);

Есть предложения?

1 Ответ

1 голос
/ 01 ноября 2011

Первый звонок правильный, но, будучи расстоянием, он не сохраняется как uchar. Когда вы хотите отобразить его, OpenCV преобразует эти числа (я думаю) в учаров. И результат кажется черным.

Найдите максимальное значение в выводе, а затем масштабируйте его, чтобы оно соответствовало полутоновому изображению

double maxVal = findMaxDistanceSomehow(); 

output.convertTo( displayBuffer, CV_8UC1, 255./maxVal,0);

imshow("dist", displayBuffer);

EDIT

Первая идея была правильной, но вы на самом деле не пытались найти maxVal! Вы сказали это, взглянув на картинку, вместо того, чтобы фактически извлечь ее. Разница между победой и неудачей.

Итак, вычислите преобразование dist, используя точный алгоритм, а затем

output.convertTo( displayBuffer, CV_8UC1, 10 ,0);

Редактировать 2

И вы должны положить туда setTo (0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...