我正在尋找使用C++/OpenCV將圖像的像素值標準化到[0..1]範圍。但是,當我使用image *= 1./255
或歸一化函數進行歸一化時,像素值會舍入爲零。我試圖設置圖像鍵入CV_32FC3
。標準化0和1之間的像素值
下面是我的代碼:
Mat image;
image = imread(imageLoc, CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYDEPTH);
Mat tempImage;
// (didn't work) tempImage *= 1./255;
image.convertTo(tempImage, CV_32F, 3);
normalize(image, tempImage, 0, 1, CV_MINMAX);
int r = 100;
int c = 150;
uchar* ptr = (uchar*)(tempImage.data + r * tempImage.step);
Vec3f tempVals;
tempVals.val[0] = ptr[3*c+1];
tempVals.val[1] = ptr[3*c+2];
tempVals.val[2] = ptr[3*c+3];
cout<<" temp image - "<< tempVals << endl;
uchar* ptr2 = (uchar*)(image.data + r * image.step);
Vec3f imVals;
imVals.val[0] = ptr2[3*c+1];
imVals.val[1] = ptr2[3*c+2];
imVals.val[2] = ptr2[3*c+3];
cout<<" image - "<< imVals << endl;
這產生控制檯輸出如下:
temp image - [0, 0, 0]
image - [90, 78, 60]
這也產生一個整數輸出 – tjp
你爲什麼這麼說?請嘗試使用'cv :: Mat :: at(row,col)'方法訪問像素。 –
我輸出一些像素值到控制檯,試圖驗證轉換是否如我所願。使用(r,c)訪問值的方法給了我期望的結果。謝謝。 –
tjp