java opencv gamma_Gamma校正及其OpenCV实现
一、什么是Gamma校正?
Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系:
[2]
这个指数即为Gamma.
经过Gamma校正后的输入和输出图像灰度值关系如图1所看到的:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。能够观察到,当gamma值小于1时(蓝色曲线),图像的总体亮度值得到提升,同一时候低灰度处的对照度得到添加,更利于分辩低灰度值时的图像细节。
图1 Gamma校正.
二、为什么进行Gamma校正?
1. 人眼对外界光源的感光值与输入光强不是呈线性关系的,而是呈指数型关系的。在低照度下,人眼更easy分辨出亮度的变化,随着照度的添加,人眼不易分辨出亮度的变化。而摄像机感光与输入光强呈线性关系。如图2所看到的:
图2 人眼和摄像机的感光与实际输入光强的关系[1]。
为方便人眼辨识图像,须要将摄像机採集的图像进行gamma校正。
2. 为能更有效的保存图像亮度信息,需进行Gamma校正。
未经gamma校正和经过gamma校正保存图像信息如图3所看到的:
图3 未经gamma校正和经过gamma校正保存图像信息.
能够观察到,未经gamma校正的情况下,低灰度时,有较大范围的灰度值被保存成同一个值,造成信息丢失;同一时候高灰度值时,非常多比較接近的灰度值却被保存成不同的值,造成空间浪费。经过gamma校正后,改善了存储的有效性和效率。
三、利用OpenCV实现的Gamma校正
void MyGammaCorrection(Mat& src, Mat& dst, float fGamma)
{
CV_Assert(src.data);
// accept only char type matrices
CV_Assert(src.depth() != sizeof(uchar));
// build look up table
unsigned char lut[256];
for( int i = 0; i < 256; i++ )
{
lut[i] = saturate_cast(pow((float)(i/255.0), fGamma) * 255.0f);
}
dst = src.clone();
const int channels = dst.channels();
switch(channels)
{
case 1:
{
MatIterator_ it, end;
for( it = dst.begin(), end = dst.end(); it != end; it++ )
//*it = pow((float)(((*it))/255.0), fGamma) * 255.0;
*it = lut[(*it)];
break;
}
case 3:
{
MatIterator_ it, end;
for( it = dst.begin(), end = dst.end(); it != end; it++ )
{
//(*it)[0] = pow((float)(((*it)[0])/255.0), fGamma) * 255.0;
//(*it)[1] = pow((float)(((*it)[1])/255.0), fGamma) * 255.0;
//(*it)[2] = pow((float)(((*it)[2])/255.0), fGamma) * 255.0;
(*it)[0] = lut[((*it)[0])];
(*it)[1] = lut[((*it)[1])];
(*it)[2] = lut[((*it)[2])];
}
break;
}
}
}
java opencv gamma_Gamma校正及其OpenCV实现相关推荐
- OpenCV畸变校正原理以及损失有效像素原理分析
常用的张正友标定法的流程,其中获取了摄像机的内参矩阵K,和畸变系数D. 1.在普通相机cv模型中,畸变系数主要有下面几个:(k1; k2; p1; p2[; k3[; k4; k5; k6]] ,其中 ...
- OpenCV透视校正perspective correction的实例(附完整代码)
OpenCV透视校正perspective correction的实例 OpenCV透视校正perspective correction的实例 OpenCV透视校正perspective correc ...
- opencv java ubuntu_Ubuntu 16.04配置OpenCV 3.1.0 for Java
我们都知道,OpenCV是基于C++的开源计算机视觉库,但是从2.4.4版本开始提供了Java绑定,也就是说,我们也可以使用Java来开发基于OpenCV的计算机视觉应用.目前,最新的版本是3.1.0 ...
- Java在eclipse中调用opencv时报错:java.lang.UnsatisfiedLinkError的解决方法
昨天把Java+opencv的环境配置好后,迫不及待的进行测试...... 出师不利.... 第一个代码就有错误,代码如下: import org.opencv.core.*; import org. ...
- 【OpenCV 例程 300篇】237. 基于主成分提取的方向校正(OpenCV)
『youcans 的 OpenCV 例程200篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]237. 基于主成分提取的方向校正(OpenCV) 主成分分析(Principal ...
- java通过模板匹配html,OpenCV模板匹配
目标 在本教程中,您将学习如何:使用OpenCV功能matchTemplate()来搜索图像补丁和输入图像之间的匹配 使用OpenCV函数minMaxLoc()来查找给定数组中的最大值和最小值(以及它 ...
- OpenCV android sdk配置OpenCV android NDK开发实例
OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...
- 我为什么要学习openCV,什么是openCV
OpenCV:Open Source Computer Vision Library 开源计算机视觉库 个人学习openCV两个原因:1.看好计算机视觉技术未来广阔市场前景:2.为产品做升级引入新技 ...
- openCV学习系列1:我为什么要学习openCV,什么是openCV
OpenCV:Open Source Computer Vision Library 开源计算机视觉库 个人学习openCV两个原因:1.看好计算机视觉技术未来广阔市场前景:2.为产品做升级引入新技 ...
最新文章
- ASP.NET MVC以ValueProvider为核心的值提供系统: DictionaryValueProvider
- 分布式K/V存储方案
- 安装.Net的痛苦经历!
- docker安装Zabbix
- .net mvc web api上传图片/文件并重命名
- Newtonsoft.Json Deserialize Type 或者 同类型 变量 反序列化
- HBase优化案例分析:Facebook Messages系统问题与解决方案
- 关于提高社交网站SNS竞争力的分析
- mysql第二条减第一条_Mysql SQL优化
- 十六、oracle 索引
- spring security3.x学习(3)_初探过滤器机制和auto-config用法
- 微信小程序开发之——模板
- C语言编写 小企鹅表情包
- 链接计算机网络密码错误,手机连不上路由器显示密码错误怎么办?
- react初步学习(三)
- 如何给PDF文件添加页眉页脚,一分钟轻松搞定
- 计算机直接切换到桌面,屏幕如何快速切换桌面
- 使用webpack打包TS时遇到的问题
- 如何使用MD5加密解密工具?
- 阿里云(三) Ubuntu系统下mysql卸载
热门文章
- 从今天起开始做一个真正的BLOGER
- 关于如何选择Bloger托管商
- Linux虚拟机获取不到ip地址的解决办法
- AR技术,让生活变得更加智能与多彩
- 计算机科学与技术专业免学费,这3所不参与国内排名的大学,免学费、包分配,考上就是铁饭碗...
- 转载----编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)...
- continue语句的作用
- Android手机天气预报项目报告
- 手写实现timeline时间线组件
- 【跃迁之路】【639天】程序员高效学习方法论探索系列(实验阶段396-2018.11.12)...