浅谈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 相关文章推荐
PyCharm代码格式调整方法
May 23 Python
python实现给scatter设置颜色渐变条colorbar的方法
Dec 13 Python
对python:循环定义多个变量的实例详解
Jan 20 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
postman传递当前时间戳实例详解
Sep 14 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
Python PIL库图片灰化处理
Apr 07 Python
Python decimal模块使用方法详解
Jun 08 Python
浅谈Python爬虫原理与数据抓取
Jul 21 Python
全面介绍python中很常用的单元测试框架unitest
Dec 14 Python
Django分页器的用法你都了解吗
May 26 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生成唯一的订单函数分享
2015/02/02 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
orm获取关联表里的属性值
2016/04/17 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
详解微信UnionID作用
2019/05/15 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
wxPython实现整点报时
2019/11/18 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
应付会计岗位职责
2013/12/12 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
接收函格式
2015/01/30 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
利用Python多线程实现图片下载器
2022/03/25 Python