Używam zestawu danych, w którym znajdują się obrazy, gdzie każdy piksel to 16-bitowy unsigned int przechowujący wartość głębokości tego piksela w mm. Próbuję wyobrazić to jako szarości głębi obrazu, wykonując następujące czynności:OpenCV: jak wizualizować obraz głębokości
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);
Jednak to pokazuje tylko dwa kolory To dlatego, że wszystkie wartości są blisko siebie, czyli w przedziale 150-175 + małe wartości, które pokazują się w kolorze czarnym (patrz poniżej).
Czy istnieje sposób, aby znormalizować te dane tak, że pokaże różne poziomy szarości, aby podkreślić te małe różnice głębokości?
Nie widzę powodu, dla którego skalowanie go przez 255/max (sam jak ja dzieląc każdy element przez max/255) sprawi, że użyje pełnego zakresu. Mam na myśli to, a ja przyjmuję odpowiedź, ale po prostu jej nie rozumiem. Co jeszcze robi ta funkcja? – Aly
The [convertScaleAbs] (http: //docs.opencv.Funkcja org/modules/core/doc/operations_on_arrays.html? highlight = convertscaleabs # cv.ConvertScaleAbs) wykonuje 3 operacje: skalowanie, obliczanie wartości bezwzględnej i konwersję na niepodpisany typ 8-bitowy. Dlatego współczynnik 255/maks. Zapewnia pełny zakres ([0-255] dla niepodpisanego 8-bitowego). Co więcej, jak wspomniał @sammy, dynamiczny zakres dopasowanego obrazu jest lepiej wykorzystywany, biorąc pod uwagę minimalną wartość danych. – samota