如何在 OpenCV Python 中规范化图像?


我们使用函数 cv2.normalize()OpenCV 中规范化图像。此函数接受参数 - src、dst、alpha、beta、norm_type、dtypemask。srcdst 是输入图像和与输入大小相同的输出,alpha 是范围规范化的较低范数值,beta 是范围规范化的较高范数值,norm_type 是规范化类型,dtype 是输出的数据类型,mask 是可选的操作掩码。

步骤

要规范化图像,我们可以按照以下步骤操作 -

  • 导入所需的库。在以下所有示例中,所需的 Python 库是 OpenCV。确保您已安装它。

  • 使用 cv2.imread() 方法将输入图像读取为灰度图像。使用图像类型(即 png 或 jpg)指定图像的完整路径。

  • 对输入图像 img 应用 cv2.normalize() 函数。传递参数 src、dst、alpha、beta、norm_type、dtypemask

img_normalized = cv2.normalize(img, None, 0, 1.0, cv2.NORM_MINMAX, dtype=cv2.CV_32F)
  • 显示规范化的输出图像。

  • 打印规范化前后图像数据。尝试找出这两个图像数据之间的差异。

让我们借助一些 Python 示例来理解这个问题。

我们将在以下示例中使用此图像作为输入文件 -

示例

在此 Python 程序中,我们使用最小-最大范数规范化彩色输入图像。图像像素值被规范化到 [0,1] 的范围。

# import required library import cv2 # read the input image in grayscale img = cv2.imread('jeep.jpg',0) print("Image data before Normalize:\n", img) # Normalize the image img_normalized = cv2.normalize(img, None, 0, 1.0, cv2.NORM_MINMAX, dtype=cv2.CV_32F) # visualize the normalized image cv2.imshow('Normalized Image', img_normalized) cv2.waitKey(0) cv2.destroyAllWindows() print("Image data after Normalize:\n", img_normalized)

输出

运行上述程序时,将产生以下输出 -

Image data before 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]]
Image data after 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 程序中,我们使用最小-最大范数规范化二进制输入图像。规范化后的图像像素值要么为 0 要么为 1。

# import required library import cv2 # read the input image as grayscale image img = cv2.imread('jeep.jpg',0) print("Image data before Normalize:\n", img) # Apply threshold to create a binary image ret,thresh = cv2.threshold(img,140,255,cv2.THRESH_BINARY) print("Image data after Thresholding:\n", thresh) # normalize the binary image img_normalized = cv2.normalize(thresh, None, 0, 1.0, cv2.NORM_MINMAX, dtype=cv2.CV_32F) # visualize the normalized image cv2.imshow('Normalized Image', img_normalized) cv2.waitKey(0) cv2.destroyAllWindows() print("Image data after Normalize:\n", img_normalized)

输出

运行上述 Python 程序时,将产生以下输出 -

Image data before 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]]
Image data after Thresholding:
[[ 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]]
Image data after Normalize:
[[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.]]

并且我们得到以下显示规范化二进制图像的窗口 -

更新于: 2023年8月26日

43K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告