前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图像处理: 如何将 像素值 控制在 值域[0, 255]

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

作者头像
JNingWei
发布2018-09-28 15:33:58
2.2K0
发布2018-09-28 15:33:58
举报
文章被收录于专栏:JNing的专栏JNing的专栏

概念

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

代码模板

代码语言:javascript
复制
# 将 像素值 低于 值域区间[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)) 。因为从 长存储空间 转到 短存储空间,会出现许多问题。从 有符号类型 转换为 无符号类型,亦会出现各种 溢出

具体示例

代码

代码语言:javascript
复制
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()
代码语言:javascript
复制
# 处理前的 图像像素点片段
[[   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]]

效果图

这里写图片描述
这里写图片描述


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年10月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概念
  • 代码模板
    • Note:
    • 具体示例
      • 代码
        • 效果图
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档