浅谈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中常用操作字符串的函数与方法总结
Feb 04 Python
利用 Monkey 命令操作屏幕快速滑动
Dec 07 Python
详解Python中类的定义与使用
Apr 11 Python
python实现mysql的读写分离及负载均衡
Feb 04 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
python实现验证码识别功能
Jun 07 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 Python
Python之循环结构
Jan 15 Python
Python中@property的理解和使用示例
Jun 11 Python
python烟花效果的代码实例
Feb 25 Python
基于 Python 实践感知器分类算法
Jan 07 Python
python实现Thrift服务端的方法
Apr 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
改造一台复古桌面收音机
2021/03/02 无线电
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
python中的内置函数getattr()介绍及示例
2014/07/20 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
python3实现多线程聊天室
2018/12/12 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
QA工程师岗位职责
2013/11/20 职场文书
文体活动实施方案
2014/03/27 职场文书
七一党日活动总结
2014/07/08 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
大学生创业事迹材料
2014/12/30 职场文书
杜甫草堂导游词
2015/02/03 职场文书
停电放假通知
2015/04/14 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python