В OpenCV, если изображение имеет тип с плавающей запятой, то только те пиксели могут быть визуализированы с помощью imshow
, которые имеют значение от 0,0 до 1,0, если значение больше 1,0, оно будет отображаться как белый пиксель, а если меньше 0.0, он будет отображаться как черный пиксель. Чтобы визуализировать изображение с плавающей запятой, масштабируйте его значения до диапазона 0.0 - 1.0
.
Что касается части преобразования ... При использовании с аргументами по умолчанию функция cv::Mat::convertTo
просто создает матрицу указанного типа, а затем копирует значения из исходной матрицы и затем округляет их до ближайшего возможного значения целевого типа данных. . Если значение выходит за пределы допустимого диапазона, оно ограничивается минимальным или максимальным значением.
В документации imshow
написано, что:
Если изображение 32-битное с плавающей запятой, значения пикселей умножаются на 255. То есть диапазон значений [0,1] отображается на [0,255].
Это означает, что только значения в диапазоне от 0,0 до 1,0 будут сопоставлены с 0 до 255. Если значение больше 1,0 и умножено на 255, оно станет больше 255. Затем оно будет ограничено диапазоном CV_8U
и в конечном итоге он также станет 255.
В вашем примере все значения, равные 1000, станут 255 в матрице назначения, поскольку тип назначения - CV_8U
, а максимально возможное значение - 255. Все значения с плавающей запятой будут floor
ed. Автоматическое сопоставление не выполняется.
Чтобы соответствующим образом сопоставить значения с диапазоном CV_8U
, используйте 3-й и 4-й параметры функции cv::Mat::convertTo
, чтобы значения масштабировались до выполнения преобразования.
Предположим, что матрица A
имеет минимальное и максимальное значения Min
и Max
, где Min!=Max
.
Чтобы правильно масштабировать значения от 0 до 255, вы можете сделать следующее:
if (Min!=Max){
A -= Min;
A.convertTo(B,CV_8U,255.0/(Max-Min));
}
Вы также можете сделать это прямо так:
if (Min!=Max)
A.convertTo(B,CV_8U,255.0/(Max-Min),-255.0*Min/(Max-Min));
(отредактировано с учетом комментария zhangxaochen)
person
sgarizvi
schedule
26.01.2013