Sto usando un set di dati in cui sono presenti immagini in cui ogni pixel è un int unsigned di 16 bit che memorizza il valore di profondità di quel pixel in mm. Sto cercando di visualizzare questa come immagine in scala di grigi di profondità nel modo seguente:OpenCV: Come visualizzare un'immagine di profondità
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);
Tuttavia, è solo mostrando due colori Questo perché tutti i valori sono vicini cioè nella gamma di 150-175 + i piccoli valori che appaiono in nero (vedi sotto).
C'è un modo per normalizzare questi dati in modo tale che mostrerà vari livelli di grigio per evidenziare queste piccole differenze di profondità?
Non capisco perché ridimensionarlo di 255/max (sam come me che divide ogni elemento di max/255) lo farà usare l'intera gamma. Voglio dire, lo fa, e accetterò la risposta, ma non capisco. Cos'altro sta facendo quella funzione? – Aly
Il [convertScaleAbs] (http: //docs.opencv.La funzione org/modules/core/doc/operations_on_arrays.html? highlight = convertscaleabs # cv.ConvertScaleAbs) esegue 3 operazioni: ridimensiona, calcola il valore assoluto e converti in un tipo a 8 bit senza segno. Ecco perché viene utilizzato il fattore 255/max per l'intero intervallo ([0-255] per unsigned 8 bit). Inoltre, come menzionato da @sammy, la gamma dinamica dell'immagine regolata viene utilizzata meglio tenendo conto del valore minimo dei dati. – samota