浅谈Python Opencv中gamma变换的使用详解


Posted in Python onApril 02, 2018

伽马变换就是用来图像增强,其提升了暗部细节,简单来说就是通过非线性变换,让图像从暴光强度的线性响应变得更接近人眼感受的响应,即将漂白(相机曝光)或过暗(曝光不足)的图片,进行矫正。

伽马变换的基本形式如下:

大于1时,对图像的灰度分布直方图具有拉伸作用(使灰度向高灰度值延展),而小于1时,对图像的灰度分布直方图具有收缩作用(是使灰度向低灰度值方向靠拢)。

#分道计算每个通道的直方图
img0 = cv2.imread('12.jpg')
hist_b = cv2.calcHist([img0],[0],None,[256],[0,256])
hist_g = cv2.calcHist([img0],[1],None,[256],[0,256])
hist_r = cv2.calcHist([img0],[2],None,[256],[0,256])
def gamma_trans(img,gamma):
 #具体做法先归一化到1,然后gamma作为指数值求出新的像素值再还原
 gamma_table = [np.power(x/255.0,gamma)*255.0 for x in range(256)]
 gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)
 #实现映射用的是Opencv的查表函数
 return cv2.LUT(img0,gamma_table)
img0_corrted = gamma_trans(img0, 0.5)
cv2.imshow('img0',img0)
cv2.imshow('gamma_image',img0_corrted)
cv2.imwrite('gamma_image.png',img0_corrted)
#分通道计算Gamma校正后的直方图
hist_b_c =cv2.calcHist([img0_corrted],[0],None,[256],[0,256])
hist_g_c =cv2.calcHist([img0_corrted],[1],None,[256],[0,256])
hist_r_c =cv2.calcHist([img0_corrted],[2],None,[256],[0,256])
fig = plt.figure('gamma')
pix_hists = [[hist_b, hist_g, hist_r],
    [hist_b_c, hist_g_c, hist_r_c]]
pix_vals = range(256)
for sub_plt, pix_hist in zip([121, 122], pix_hists):
 ax = fig.add_subplot(sub_plt, projection='3d')
 for c, z, channel_hist in zip(['b', 'g', 'r'], [20, 10, 0], pix_hist):
  cs = [c] * 256
  ax.bar(pix_vals, channel_hist, zs=z, zdir='y', color=cs, alpha=0.618, edgecolor='none', lw=0)
 ax.set_xlabel('Pixel Values')
 ax.set_xlim([0, 256])
 ax.set_ylabel('Count')
 ax.set_zlabel('Channels')
plt.show()
cv2.waitKey()

以上这篇浅谈Python Opencv中gamma变换的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中实现结构相似的函数调用方法
Mar 10 Python
Python实现测试磁盘性能的方法
Mar 12 Python
Python中用max()方法求最大值的介绍
May 15 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
python让列表倒序输出的实例
Jun 25 Python
Python实战之制作天气查询软件
May 14 Python
python增加图像对比度的方法
Jul 12 Python
python获取array中指定元素的示例
Nov 26 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
Python xpath表达式如何实现数据处理
Jun 13 Python
通过代码实例了解Python异常本质
Sep 16 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 #Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 #Python
python opencv 图像尺寸变换方法
Apr 02 #Python
Python聊天室程序(基础版)
Apr 01 #Python
Python socket实现简单聊天室
Apr 01 #Python
简单实现python聊天程序
Apr 01 #Python
简单实现Python爬取网络图片
Apr 01 #Python
You might like
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
Yii2中Restful API原理实例分析
2016/07/25 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
Document 对象的常用方法
2009/07/31 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
node.js中的http.response.addTrailers方法使用说明
2014/12/14 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
python中的五种异常处理机制介绍
2014/09/02 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
德国网上宠物店:Zoobio
2018/05/23 全球购物
实习医生自我评价
2013/09/22 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
介绍信怎么写
2015/01/30 职场文书