浅谈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网络编程学习笔记(二):socket建立网络客户端
Jun 09 Python
Python列表append和+的区别浅析
Feb 02 Python
Python 函数基础知识汇总
Mar 09 Python
详解python中docx库的安装过程
Nov 08 Python
python django中8000端口被占用的解决
Dec 17 Python
OpenCV 表盘指针自动读数的示例代码
Apr 10 Python
python和c语言哪个更适合初学者
Jun 22 Python
Python自动化测试中yaml文件读取操作
Aug 20 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
python常见的占位符总结及用法
Jul 02 Python
Python pandas求方差和标准差的方法实例
Aug 04 Python
Python Matplotlib绘制动画的代码详解
May 30 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
PHP树的代码,可以嵌套任意层
2006/10/09 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
PHP写的求多项式导数的函数代码
2012/07/04 PHP
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
2015/12/16 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
Vue组件中slot的用法
2018/01/30 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
JavaScript十大取整方法实例教程
2020/12/03 Javascript
[48:21]林俊杰圣堂刺客超神杀戮秀
2014/10/29 DOTA
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
python获取本地计算机名字的方法
2015/04/29 Python
Python pandas常用函数详解
2018/02/07 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
django创建超级用户过程解析
2019/09/18 Python
tensorflow的计算图总结
2020/01/12 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
python爬虫请求头设置代码
2020/07/28 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
怎样写留学自荐信
2013/11/11 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
python unittest单元测试的步骤分析
2021/08/02 Python