浅谈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中去空格函数的用法
Aug 21 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
May 05 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
Python 3 判断2个字典相同
Aug 06 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
python中调试或排错的五种方法示例
Sep 12 Python
wxPython多个窗口的基本结构
Nov 19 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
PyQt5实现画布小程序
May 30 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 Python
python高温预警数据获取实例
Jul 23 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 模拟POST|GET操作实现代码
2010/07/20 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
php jsonp单引号转义
2014/11/23 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
python numpy实现rolling滚动案例
2020/06/08 Python
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
如何写出好的Java代码
2014/04/25 面试题
机电专业大学生职业规划书范文
2014/02/25 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
司机工作自我鉴定
2014/09/19 职场文书
工作年限证明模板
2014/11/01 职场文书