浅谈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实现FTP服务器服务的方法
Apr 11 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
简单实现python画圆功能
Jan 25 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
Oct 21 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
python实现智能语音天气预报
Dec 02 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 Python
Python实现猜拳与猜数字游戏的方法详解
Apr 06 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读取数据库信息的几种方法
2008/05/24 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
javascript 闭包疑问
2010/12/30 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
js友好的时间返回函数
2016/08/24 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
python实现每次处理一个字符的三种方法
2014/10/09 Python
浅谈python中的正则表达式(re模块)
2017/10/17 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
浅谈Python NLP入门教程
2017/12/25 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
财务人员个人求职信范文
2013/12/04 职场文书
安全教育心得体会
2013/12/29 职场文书
家长会邀请书
2014/01/25 职场文书
大明湖导游词
2015/02/03 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
家庭经济困难证明
2015/06/23 职场文书
餐馆开业致辞
2015/08/01 职场文书