浅谈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 图片验证码代码
Dec 07 Python
python将字符串转换成数组的方法
Apr 29 Python
Python中使用装饰器来优化尾递归的示例
Jun 18 Python
python入门教程之识别验证码
Mar 04 Python
Python文件的读写和异常代码示例
Oct 31 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
Python利用递归实现文件的复制方法
Oct 27 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
python dict如何定义
Sep 02 Python
如何一键升级Python所有包
Nov 05 Python
python 如何在list中找Topk的数值和索引
May 20 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读注册表
2006/10/09 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
总结一些js自定义的函数
2006/08/05 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
OpenCV 模板匹配
2019/07/10 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
python常用运维脚本实例小结
2020/02/14 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
Python LMDB库的使用示例
2021/02/14 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
营销与策划专业毕业生求职信
2013/11/01 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
加薪申请报告范本
2015/05/15 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书