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

来源:互联网 发布:淘宝隐形降权查询工具 编辑:程序博客网 时间:2024/05/29 18:37

概念

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

代码模板

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

Note:

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

具体示例

代码

import numpy as nppic = 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 cv2cv2.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]]

效果图

这里写图片描述



阅读全文
3 0