Ответ, который дал @SSteve, почти сработал для меня, но вызов convertTo
, казалось, просто отрубил байт старшего разряда вместо фактического масштабирования значений до 8-битного диапазона. Поскольку @Sirnino не указывал, какое поведение требуется, я решил опубликовать код, который будет выполнять (линейное) масштабирование, на случай, если кто-то еще захочет это сделать.
Оригинальный код SSteve:
CvMat* depthMetersMat = cvCreateMat( 480, 640, CV_16UC1 );
cv::Mat m2(depthMetersMat, true);
m2.convertTo(m2, CV_8U);
Чтобы масштабировать значения, вам просто нужно добавить коэффициент масштабирования (1/256 или 0,00390625 для масштабирования от 16 до 8 бит) в качестве третьего параметра (альфа) к вызову convertTo
m2.convertTo(m2, CV_8U, 0.00390625);
Вы также можете добавить четвертый параметр (дельта), который будет добавляться к каждому значению после его умножения на альфа. См. документы для получения дополнительной информации.