浅谈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中的super用法详解
May 28 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
Python实现mysql数据库更新表数据接口的功能
Nov 19 Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 Python
python networkx 根据图的权重画图实现
Jul 10 Python
pytorch中获取模型input/output shape实例
Dec 30 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 Python
什么是python的自省
Jun 21 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 Python
pd.DataFrame中的几种索引变换的实现
Jun 16 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+dbfile开发小型留言本
2006/10/09 PHP
在IIS上安装PHP4.0正式版
2006/10/09 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
JavaScript delete操作符应用实例
2009/01/13 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
Vue项目移动端滚动穿透问题的实现
2020/05/19 Javascript
Apache如何部署django项目
2017/05/21 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
python 实现单例模式的5种方法
2020/09/23 Python
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
大学生毕业自我鉴定范文
2014/02/03 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
三年级评语大全
2014/04/23 职场文书
安全教育演讲稿
2014/05/09 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
表扬通报怎么写
2015/01/16 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
小型婚礼主持词
2015/06/30 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书