tjp*_*tjp 4 c++ opencv image-processing
我希望使用 C++/OpenCV 将图像的像素值归一化到 [0..1] 范围内。但是,当我使用image *= 1./255或 normalize 函数进行归一化时,像素值会向下舍入为零。我尝试将图像设置为 type CV_32FC3。
下面是我的代码:
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;
Run Code Online (Sandbox Code Playgroud)
这会在控制台中产生以下输出:
temp image - [0, 0, 0]
image - [90, 78, 60]
Run Code Online (Sandbox Code Playgroud)
你可以convertTo()为你做规范化:
image.convertTo(tempImage, CV_32FC3, 1.f/255);
Run Code Online (Sandbox Code Playgroud)
您正在传递3给convertTo(),大概是作为 channel-count ,但这不是正确的签名。