如何在OpenCV Python中归一化图像?
我们使用函数cv2.normalize()在OpenCV中归一化图像。此函数接受参数- src、dst、alpha、beta、norm_type、dtype 和 mask。src 和dst是输入图像和与输入相同大小的输出图像,alpha是用于范围归一化的较低标准值, beta 是用于范围归一化的较高标准值,norm_type是归一化类型, dtype 是输出数据类型,而 mask 是可选的操作掩码。
步骤
要归一化图像,我们可以按照以下步骤进行:
- 导入所需的库。在以下所有示例中,所需的Python库是 OpenCV 。请确保您已经安装了它。
-
使用 cv2.imread() 方法将输入图像作为灰度图像读取。指定图像的完整路径以及图像类型(即png或jpg)。
-
在输入图像img上应用 cv2.normalize() 函数。传递参数 src、dst、alpha、beta、norm_type、dtype 和 mask 。
img_normalized = cv2.normalize(img, None, 0, 1.0, cv2.NORM_MINMAX, dtype=cv2.CV_32F)
-
显示归一化输出图像。
-
在Normalize之前和之后打印图像数据。试图找出这两个图像数据之间的差异。
让我们通过一些Python示例来了解问题。
我们将使用此图像作为 输入文件 在以下示例中。
示例
在此Python程序中,我们使用min-max norm对彩色输入图像进行归一化。将图像像素值归一化到范围[0,1]。
#导入所需的库
import cv2
#使用灰度图像读取输入图像
img = cv2.imread('jeep.jpg',0)
print("Normalize之前的图像数据:\n", img)
#归一化图像
img_normalized = cv2.normalize(img, None, 0, 1.0,
cv2.NORM_MINMAX, dtype=cv2.CV_32F)
#可视化归一化图像
cv2.imshow('归一化图像', img_normalized)
cv2.waitKey(0).destroyAllWindows()
print("Normalize之后的图像数据:\n", img_normalized)
输出
运行上述程序时,将产生以下输出 −
Normalize之前的图像数据:
[[ 37 37 37 ... 55 55 55]
[ 39 39 39 ... 57 56 56]
[ 39 39 39 ... 56 56 56]
...
[243 244 244 ... 82 85 86]
[242 245 245 ... 83 91 91]
[242 245 245 ... 86 94 93]]
Normalize之后的图像数据:
[[0.14509805 0.14509805 0.14509805 ... 0.21568629 0.21568629 0.21568629]
[0.15294118 0.15294118 0.15294118 ... 0.22352943 0.21960786 0.21960786]
[0.15294118 0.15294118 0.15294118 ... 0.21960786 0.21960786 0.21960786]
...
[0.95294124 0.9568628 0.9568628 ... 0.32156864 0.33333334 0.3372549 ]
[0.9490197 0.9607844 0.9607844 ... 0.3254902 0.35686275 0.35686275]
[0.9490197 0.9607844 0.9607844 ... 0.3372549 0.36862746 0.3647059 ]]
并且我们得到以下窗口显示归一化的图像 –
示例
在这个Python程序中,我们使用min-max norm规范化二进制输入图像。规范化后的图像像素值为0或1。
# 导入所需库
import cv2
# 读取输入图像作为灰度图像
img = cv2.imread('jeep.jpg',0)
print("标准化前的图像数据:\n", img)
# 应用阈值创建二进制图像
ret,thresh = cv2.threshold(img,140,255,cv2.THRESH_BINARY)
print("阈值化后的图像数据:\n", thresh)
# 规范化二进制图像
img_normalized = cv2.normalize(thresh, None, 0, 1.0,
cv2.NORM_MINMAX, dtype=cv2.CV_32F)
# 可视化规范化后的图像
cv2.imshow('规范化后的图像', img_normalized)
cv2.waitKey(0)
cv2.destroyAllWindows()
print("标准化后的图片数据:\n", img_normalized)
输出
当您运行上述Python程序时,它将产生以下 输出 −
标准化前的图像数据:
[[ 37 37 37 ... 55 55 55]
[ 39 39 39 ... 57 56 56]
[ 39 39 39 ... 56 56 56]
...
[243 244 244 ... 82 85 86]
[242 245 245 ... 83 91 91]
[242 245 245 ... 86 94 93]]
阈值化后的图像数据:
[[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]
[ 0 0 0 ... 0 0 0]
...
[255 255 255 ... 0 0 0]
[255 255 255 ... 0 0 0]
[255 255 255 ... 0 0 0]]
标准化后的图片数据:
[[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
[0. 0. 0. ... 0. 0. 0.]
...
[1. 1. 1. ... 0. 0. 0.]
[1. 1. 1. ... 0. 0. 0.]
[1. 1. 1. ... 0. 0. 0.]]
然后我们得到以下窗口显示规范化后的二进制图像−