OpenCV:标准化图像的像素值

Posted

技术标签:

【中文标题】OpenCV:标准化图像的像素值【英文标题】:OpenCV: Normalizing pixel values of an image 【发布时间】:2014-04-20 03:58:15 【问题描述】:

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

【问题讨论】:

您使用的是旧版本的 opencv。请阅读最新的doc。 【参考方案1】:

不,normalize 的 documentation 表示

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

(来源:opencv.org)

因此,如果您使用normalize(src, dst, 0, 1, NORM_MINMAX, CV_32F);,您的数据将被归一化,使得最小值为0,最大值为1。

不清楚您的意思,将图像的像素值设为均值 0.0 和 1.0 的范数。正如您所写,我了解您希望对像素值进行归一化,以便通过堆叠图像列获得的向量的范数为 1.0。如果这是您想要的,您可以使用meanStdDev (documentation) 并执行以下操作(假设您的图像是灰度的):

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]);

如果你只是想归一化,使像素值的方差为一,忽略第三行。

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

【讨论】:

实际上我正在做一个对象跟踪项目,我需要将图像转换为均值 0.0 和范数 1.0,以使图像具有一致的强度,即减少不同照明条件的影响. @Anislein343 目前还不清楚什么应该有“1.0的规范”......无论如何,如果你想有效地减少不同光照条件的影响,图像的全局归一化获胜帮不了你。请查看以下文章:link1、link2、link3、link4。

以上是关于OpenCV:标准化图像的像素值的主要内容,如果未能解决你的问题,请参考以下文章

标准化 0 到 1 之间的像素值

OpenCV3入门图像的阈值

计算机视觉OpenCV 4高级编程与项目实战(Python版):图像像素统计

通过强度值标准化颜色通道和图像,OpenCV

如何标准化图像中的像素值并保存

opencv读取ENVI标准格式