浅谈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标准异常和异常处理详解
Feb 02 Python
Python发送email的3种方法
Apr 28 Python
python实现将汉字转换成汉语拼音的库
May 05 Python
python计算一个序列的平均值的方法
Jul 11 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
Python3进制之间的转换代码实例
Aug 24 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 Python
Python 随机按键模拟2小时
Dec 30 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
Python+Appium实现自动抢微信红包
May 21 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
source.php查看源文件
2006/12/09 PHP
PHPMyAdmin 快速配置方法
2009/05/11 PHP
深入理解PHP之require/include顺序 推荐
2011/01/02 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
详解JavaScript 的执行机制
2020/09/18 Javascript
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
Auchan Direct波兰:欧尚在线杂货店
2016/10/19 全球购物
高级销售求职信
2014/02/21 职场文书
信息技术培训感言
2014/03/06 职场文书
初中学生操行评语
2014/12/26 职场文书
军训决心书范文
2015/09/22 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
python实现简易自习室座位预约系统
2021/06/30 Python