浅谈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端口重定向示例
Feb 10 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
python基础教程项目四之新闻聚合
Apr 02 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
用python的turtle模块实现给女票画个小心心
Nov 23 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
Python多线程Threading、子线程与守护线程实例详解
Mar 24 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
django queryset 去重 .distinct()说明
May 19 Python
Pycharm自带Git实现版本管理的方法步骤
Sep 18 Python
Django路由层URLconf作用及原理解析
Sep 24 Python
Python开发五子棋小游戏
Apr 28 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初学者们头痛的十四个问题
2007/01/15 PHP
PHP性能优化 产生高度优化代码
2011/07/22 PHP
分享php多功能图片处理类
2016/05/15 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
jquery 滚动条事件简单实例
2013/07/12 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
bootstrap的工具提示实例代码
2017/05/17 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
JavaScript指定断点操作实例教程
2018/09/18 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
python利用正则表达式提取字符串
2016/12/08 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
Tensorflow 多线程设置方式
2020/02/06 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
django正续或者倒序查库实例
2020/05/19 Python
Django url 路由匹配过程详解
2021/01/22 Python
校园奶茶店创业计划书
2014/01/23 职场文书
写自荐信的注意事项
2014/03/09 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
2019教师的学习计划
2019/06/25 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server