浅谈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中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
python使用 HTMLTestRunner.py生成测试报告
Oct 20 Python
tensorflow实现softma识别MNIST
Mar 12 Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 Python
Flask框架配置与调试操作示例
Jul 23 Python
详解如何设置Python环境变量?
May 13 Python
深入浅析Python中的迭代器
Jun 04 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
Python 如何创建一个简单的REST接口
Jul 30 Python
Linux系统下升级pip的完整步骤
Jan 31 Python
Python字符串的转义字符
Apr 07 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操作excel文件 基于phpexcel
2010/07/02 PHP
php实现webservice实例
2014/11/06 PHP
PHP错误处理函数
2016/04/03 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
flask框架视图函数用法示例
2018/07/19 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
python之mock模块基本使用方法详解
2019/06/27 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
使用Puppeteer爬取微信文章的实现
2020/02/11 Python
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
PyQt 如何创建自定义QWidget
2021/03/24 Python
房地产公司见习自我鉴定
2014/04/28 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技