Преобразование CV_32FC1 в CV_16UC1 - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь преобразовать float изображение, полученное с имитируемой глубины камеры, в CV_16UC1. Камера публикует глубину в формате CV_32FC1. Я пробовал много способов, но результат не был разумным.

cv::Mat depth_cv(512, 512, CV_32FC1, depth);
cv::Mat depth_converted;
depth_cv.convertTo(depth_converted,CV_16UC1);

Результат - черное изображение. Если я использую масштабный коэффициент, изображение будет белым.

Я также пытался сделать это так:

float depthValueF [512*512];
for (int i=0;i<resolution[1];i++){ // go through the rows (y)
    for (int j=0;j<resolution[0];j++){ // go through the columns (x)
        depthValueOfPixel=depth[i*resolution[0]+j]; // this is location j/i, i.e. x/y
        depthValueF[i*resolution[0]+j] = (depthValueOfPixel) * (65535.0f);
    }
}

Не удалось, либо.

1 Ответ

0 голосов
/ 28 апреля 2020

Попробуйте вместо этого использовать cv::normalize, что не только преобразует изображение в правильный тип данных, но и правильно выполнит масштабирование за вас.

Поэтому:

cv::Mat depth_cv(512, 512, CV_32FC1, depth);
cv::Mat depth_converted;
cv::normalize(depth_cv, depth_converted, 0, 65535, NORM_MINMAX, CV_16UC1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...