前言
在图像处理过程中,像素类型的转换与归一化是常用的操作。像素类型转换可以调整数据的存储格式以适应不同算法的需求,而归一化则是对像素值进行线性映射以方便后续处理。在 OpenCV 中,这些操作可以通过简单的函数调用实现。
功能实现
本示例实现了以下功能:
- 加载一张图片,并将其像素类型转换为
float32
。 - 使用
cv.normalize
对图像进行归一化,将像素值映射到[0, 1]
。 - 恢复图像为
[0, 255]
范围并显示结果。
完整代码
import cv2 as cv
import numpy as np
def norm_demo():
# 加载图像
image = cv.imread('images/example.png')
if image is None:
raise FileNotFoundError("图像路径错误,请检查路径是否正确!")
# 创建窗口
cv.namedWindow("norm_demo", cv.WINDOW_AUTOSIZE)
# 初始化结果图像
result = np.zeros_like(np.float32(image))
# 图像归一化,将像素值映射到 [0, 1] 范围
cv.normalize(np.float32(image), result, 0, 1, cv.NORM_MINMAX, dtype=cv.CV_32F)
# 恢复到 [0, 255] 并转换为 uint8 类型
normalized_image = np.uint8(result * 255)
# 显示结果
cv.imshow("norm_demo", normalized_image)
cv.waitKey(0)
cv.destroyAllWindows()
# 调用函数
norm_demo()
图像归一化
result = np.zeros_like(np.float32(image))
cv.normalize(np.float32(image), result, 0, 1, cv.NORM_MINMAX, dtype=cv.CV_32F)
将原始图像的像素值转换为 float32
类型,适配归一化操作。使用 cv.normalize
实现归一化:
- 输入:
np.float32(image)
,将图像数据转换为float32
类型。 - 输出:
result
,存储归一化后的图像。 - 范围:将像素值映射到
[0, 1]
。 - 归一化类型:
cv.NORM_MINMAX
,最小值映射为0
,最大值映射为1
。 - 数据类型:指定输出类型为
cv.CV_32F
。
恢复像素值范围
normalized_image = np.uint8(result * 255)
- 将归一化结果乘以
255
,将像素值恢复到[0, 255]
。 - 转换为
uint8
类型以适配显示需求。
归一化将像素值线性映射到 [0, 1]
范围,方便后续处理,显示时再转换回 [0, 255]
,保持视觉一致性。归一化是深度学习中常见的数据预处理步骤。将像素值标准化到 [0, 1]
或 [-1, 1]
范围,提升模型的训练效果。
© 版权声明
转载请注明出处,并标明原文链接。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
THE END
暂无评论内容