OpenCV-Python快速入门系列18图像像素类型转换与归一化

前言

在图像处理过程中,像素类型的转换与归一化是常用的操作。像素类型转换可以调整数据的存储格式以适应不同算法的需求,而归一化则是对像素值进行线性映射以方便后续处理。在 OpenCV 中,这些操作可以通过简单的函数调用实现。

功能实现

本示例实现了以下功能:

  1. 加载一张图片,并将其像素类型转换为 float32
  2. 使用 cv.normalize 对图像进行归一化,将像素值映射到 [0, 1]
  3. 恢复图像为 [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
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容