OpenCV:规范化图像的像素值

时间:2014-04-20 03:58:16

标签: c++ opencv

我试图将图像的像素值标准化为平均值为0.0,标准值为1.0,以使图像具有一致的强度。有一个OpenCV函数,即cvNormalize(src,dst,0,1,cv_MINMAX),但是这个函数可以用于我的目的吗?任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:12)

不,normalize的{​​{3}}说

normType=NORM_MINMAX(仅限密集数组)时,函数normalize缩放并移动输入数组元素,以便:

documentation

因此,如果您使用normalize(src, dst, 0, 1, NORM_MINMAX, CV_32F);,您的数据将被规范化,以便最小为0且最大为1。

通过给出图像的像素值0.0和 1.0 的范数,不清楚你的意思。在您编写时,我了解您要对像素值进行标准化,以便通过堆叠图像列获得的向量的范数为1.0。如果这是你想要的,你可以使用meanStdDevequations http://docs.opencv.org/_images/math/31bceb122fccfc14279355379f91c7b269290386.png)并执行以下操作(假设你的图像是灰度):

cv::Scalar avg,sdv;
cv::meanStdDev(image, avg, sdv);
sdv.val[0] = sqrt(image.cols*image.rows*sdv.val[0]*sdv.val[0]);
cv::Mat image_32f;
image.convertTo(image_32f,CV_32F,1/sdv.val[0],-avg.val[0]/sdv.val[0]);

如果您只想进行标准化以使像素值的方差为1,则忽略第3行。

是的,CV_32F表示生成的图像将使用32位浮点数据类型(即float)。