Я использую набор данных, в котором у него есть изображения, где каждый пиксель представляет собой 16-битный беззнаковый int, сохраняющий значение глубины этого пикселя в мм. Я пытаюсь представить себе это как градаций серого глубины изображения, выполнив следующие действия:OpenCV: Как визуализировать изображение глубины
cv::Mat depthImage;
depthImage = cv::imread("coffee_mug_1_1_1_depthcrop.png", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); // Read the file
depthImage.convertTo(depthImage, CV_32F); // convert the image data to float type
namedWindow("window");
float max = 0;
for(int i = 0; i < depthImage.rows; i++){
for(int j = 0; j < depthImage.cols; j++){
if(depthImage.at<float>(i,j) > max){
max = depthImage.at<float>(i,j);
}
}
}
cout << max << endl;
float divisor = max/255.0;
cout << divisor << endl;
for(int i = 0; i < depthImage.rows; i++){
for(int j = 0; j < depthImage.cols; j++){
cout << depthImage.at<float>(i,j) << ", ";
max = depthImage.at<float>(i,j) /= divisor;
cout << depthImage.at<float>(i,j) << endl;
}
}
imshow("window", depthImage);
waitKey(0);
Однако, это только показывает два цвета это происходит потому, что все значения будут близки друг к другу, то есть в диапазоне 150-175 + небольшие значения, которые отображаются черным цветом (см. ниже).
Есть ли способ, чтобы нормализовать эти данные так, что он будет показывать различные уровни серого, чтобы выделить эти небольшие различия глубины?
Я не понимаю, почему его масштабирование на 255/max (sam, когда я деля каждый элемент на max/255), он будет использовать весь диапазон. Я имею в виду, что это так, и я буду принимать ответ, но я просто не понимаю. Что еще делает эта функция? – Aly
[convertScaleAbs] (http: //docs.opencv.org/modules/core/doc/operations_on_arrays.html? highlight = converttscaleabs # cv.ConvertScaleAbs) выполняет 3 операции: масштабирование, вычисление абсолютного значения и преобразование в неподписанный 8-битный тип. Вот почему коэффициент 255/max обеспечивает полный диапазон ([0-255] для беззнакового 8-битного). Кроме того, как отметил @sammy, динамический диапазон скорректированного изображения лучше использовать, учитывая минимальное значение ваших данных. – samota