图像处理: 如何将 像素值 控制在 值域[0, 255]

概念

在做计算机视觉方向项目的时候,往往需要进行图像处理。但是在此过程中,常常会遇到 对 像素值 进行 变换计算 后,像素值 超出 值域区间 [0, 255] 的情况。再加上计算过程中各自 float型int型uint型 的问题都跳出来作乱,在初期做图像相关项目,深为此苦恼。后来自己写了一段万能代码模板,成功地解决了此类问题。

代码模板

# 将 像素值 低于 值域区间[0, 255] 的 像素点 置0
pic *= (pic>0)
# 将 像素值 高于 值域区间[0, 255] 的 像素点 置255
pic = pic * (pic<=255) + 255 * (pic>255)
# 将 dtype 转为图片的 dtype : uint8
pic = pic.astype(np.uint8)

Note:

不可 提前 进行 类型转换pic = pic.astype(np.uint8)) 。因为从 长存储空间 转到 短存储空间,会出现许多问题。从 有符号类型 转换为 无符号类型,亦会出现各种 溢出

具体示例

代码

import numpy as np

pic = np.random.uniform(-500, 500, size=[500, 500, 1])

print pic[100:105, 100:105, 0]

pic *= (pic>0)
pic = pic * (pic<=255) + 255 * (pic>255)
pic = pic.astype(np.uint8)

print pic[100:105, 100:105, 0]

import cv2
cv2.imshow('', pic)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 处理前的 图像像素点片段
[[   5.89746705  -43.89719852  328.09920151 -454.31665893  267.5631818 ]
 [  33.86695611   22.49668227  238.23830524 -179.06889071 -403.42761205]
 [ 285.50896753 -120.39818227 -426.7793327   135.06240872 -105.65909158]
 [  79.93494376 -377.71028993 -351.47462962  359.15593742 -296.08087807]
 [ 431.2010409   421.58265706 -116.30079321  379.04589982 -450.61887501]]

# 处理后的 图像像素点片段
[[  5   0 255   0 255]
 [ 33  22 238   0   0]
 [255   0   0 135   0]
 [ 79   0   0 255   0]
 [255 255   0 255   0]]

效果图

图像处理: 如何将 像素值 控制在 值域[0, 255]_第1张图片



你可能感兴趣的:(图像处理)