浅谈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批量导出导入MySQL用户的方法
Nov 15 Python
Python判断操作系统类型代码分享
Nov 22 Python
django+js+ajax实现刷新页面的方法
May 22 Python
python使用itchat实现手机控制电脑
Feb 22 Python
django的登录注册系统的示例代码
May 14 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
Django MEDIA的配置及用法详解
Jul 25 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
python可视化text()函数使用详解
Feb 11 Python
python中matplotlib实现随鼠标滑动自动标注代码
Apr 23 Python
什么是python的id函数
Jun 11 Python
python基于Kivy写一个图形桌面时钟程序
Jan 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
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
浅析Node.js查找字符串功能
2014/09/03 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
iview实现图片上传功能
2020/06/29 Javascript
Vue——前端生成二维码的示例
2020/12/19 Vue.js
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
python中Flask框架简单入门实例
2015/03/21 Python
Python根据区号生成手机号码的方法
2015/07/08 Python
python先序遍历二叉树问题
2017/11/10 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
Python 下载及安装详细步骤
2019/11/04 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
.net软件工程师面试题
2015/03/31 面试题
小学庆六一活动总结
2014/08/28 职场文书
设备收款委托书范本
2014/10/02 职场文书
见习报告格式要求
2014/11/04 职场文书
2014年环卫工作总结
2014/11/22 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS