浅谈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实现将文本生成二维码的方法示例
Jul 18 Python
Python网络编程之TCP与UDP协议套接字用法示例
Feb 02 Python
详解django2中关于时间处理策略
Mar 06 Python
python全栈知识点总结
Jul 01 Python
python实现超市管理系统(后台管理)
Oct 25 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 Python
Python文件时间操作步骤代码详解
Apr 13 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
pycharm 添加解释器的方法步骤
Aug 31 Python
用python-webdriver实现自动填表的示例代码
Jan 13 Python
Python 语言实现六大查找算法
Jun 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中调用JAVA
2006/10/09 PHP
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
php xml实例 留言本
2009/03/20 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
禁止js文件缓存的代码
2010/04/09 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
python编写爬虫小程序
2015/05/14 Python
Python读写docx文件的方法
2018/05/08 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
Keras自定义IOU方式
2020/06/10 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
详解Python中import机制
2020/09/11 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
2014年财务工作总结范文
2014/11/11 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python
2021年国漫热度排行前十,完美世界上榜,第四是美国动画作品
2022/03/18 国漫