浅谈python opencv对图像颜色通道进行加减操作溢出


Posted in Python onJune 03, 2020

由于opencv读入图片数据类型是uint8类型,直接加减会导致数据溢出现象

(1)用Numpy操作

可以先将图片数据类型转换成int类型进行计算,

data=np.array(image,dtype='int')

经过处理后(如:遍历,将大于255的置为255,小于0的置为0)

再将图片还原成uint8类型

data=np.array(image,dtype='uint8')

注意:

(1)如果直接相加,那么

当像素值 > 255时,结果为对256取模的结果,例如:(240+66) % 256=50

而不是自动按照255处理

(2)如果直接相减,那么

当像素值<0时,结果为加上256的结果,例如:(100-140)+ 256 = 216

而不是自动按照0处理

例如:

选取一张图片R分量做实验

浅谈python opencv对图像颜色通道进行加减操作溢出

情况一:直接numpy操作

先加到240,再加66,超过了255,可以看到,并不默认255,而是变成了50

浅谈python opencv对图像颜色通道进行加减操作溢出

再试试相减操作:再减去100,本来结果是-50,但是可以看到,变成了206(-50+256)

浅谈python opencv对图像颜色通道进行加减操作溢出

(2)用opencv自带函数操作

图像相加:

cv2.add()

像素值>255, 直接自动按照255处理

图像相减:

cv2.subtract()

像素值小于0,直接自动按照0处理

例如:

r加上300,自动变成255

浅谈python opencv对图像颜色通道进行加减操作溢出

同理,小于0的自动变为0

以上两种方法可以根据需要选择。

补充知识:Opencv numpy中uint8类型存储图像

用opencv处理图像时,可以发现获得的矩阵类型都是uint8

import cv2 as cv
img=cv.imread(hello.png)
print(img)
array([[[...],
    [...],
    [...]]],dtype='uint8')

uint8是专门用于存储各种图像的(包括RGB,灰度图像等),范围是从0?255

这里要注意如何转化到uint8类型

1: numpy有np.uint8()函数,但是这个函数仅仅是对原数据和0xff相与(和最低2字节数据相与),这就容易导致如果原数据是大于255的,那么在直接使用np.uint8()后,比第八位更大的数据都被截断了,比如:

>>>a=[2000,100,2]
>>>np.uint8(a)
array([208, 100, 2], dtype=uint8)

2: 用cv2.normalize函数配合cv2.NORM_MINMAX,可以设置目标数组的最大值和最小值,然后让原数组等比例的放大或缩小到目标数组,如下面的例子中是将img的所有数字等比例的放大或缩小到0?255范围的数组中,

cv2.normalize(img, out, 0, 255, cv2.NORM_MINMAX)

然后改变数据类型

np.array([out],dtype=‘uint8')

总结:

要想将当前的数组作为图像类型来进行各种操作,就要转换到uint8类型,转换的方式推荐使用第二种,因为第一种在值大于255以后就容易丢失。

以上这篇浅谈python opencv对图像颜色通道进行加减操作溢出就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现SVN的目录周期性备份实例
Jul 17 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
python中的不可变数据类型与可变数据类型详解
Sep 16 Python
python numpy元素的区间查找方法
Nov 14 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
python函数与方法的区别总结
Jun 23 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
python使用numpy实现直方图反向投影示例
Jan 17 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
python如何停止递归
Sep 09 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
python 实现的车牌识别项目
Jan 25 Python
python golang中grpc 使用示例代码详解
Jun 03 #Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 #Python
QML用PathView实现轮播图
Jun 03 #Python
Python基于smtplib协议实现发送邮件
Jun 03 #Python
Pytorch环境搭建与基本语法
Jun 03 #Python
如何学习Python time模块
Jun 03 #Python
使用openCV去除文字中乱入的线条实例
Jun 02 #Python
You might like
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
php创建多级目录代码
2008/06/05 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
Python 多线程的实例详解
2017/09/07 Python
python实现分页效果
2017/10/25 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
python定义类self用法实例解析
2020/01/22 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
Python运行异常管理解决方案
2020/03/09 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
纠纷协议书
2014/04/16 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL