opencv上Gamma调节的源码
来源:互联网 发布:贪心算法的应用实例 编辑:程序博客网 时间:2024/04/28 15:50
这周单位要做一个人脸美化的项目,查资料遇到这位大牛的博客,地址如下:点击打开链接
我的代码也是在他的基础上进行修改的,但是他对图像的RGB三个通道平等调节,为了适应我的需求,我改成了针对三个通道分别调节。废话不多说,开始上源码
void ImageAdjust(Mat& src, Mat& dst, vector<double> low_in, vector<double> high_in, vector<double> low_out, vector<double> high_out, vector<double> gamma){vector<double> low;vector<double> high;vector<double> bottom;vector<double> top;vector<double> err_in;vector<double> err_out;int N = low_in.size();for (int i=0; i<N; i++){low.push_back(low_in[i]*255);high.push_back(high_in[i]*255);bottom.push_back(low_out[i]*255);top.push_back(high_out[i]*255);err_in.push_back(high[i] - low[i]);err_out.push_back(top[i] - bottom[i]);} int x,y;vector<double> val; // intensity transform for( y = 0; y < src.rows; y++) { for (x = 0; x < src.cols; x++) { for (int i=0; i<N; i++) {double val = (src.at<Vec3b>(y, x)[i]);val = pow((val-low[i])/err_in[i], gamma[i])*err_out[i]+bottom[i]; // ☆if(val > 255) val = 255;if(val < 0) val = 0;dst.at<Vec3b>(y, x)[i] = val; } } }}
测试主函数:
int _tmain(int argc, _TCHAR* argv[]){Mat src = imread("test.png",1);Mat dst = Mat(src.size(), src.type());if (!src.empty()){double a[] = {0.0, 0.0, 0.0};double b[] = {1.0, 1.0, 1.0};double c[] = {0.0, 0.0, 0.0};double d[] = {1.0, 1.0, 1.0};double e[] = {1.0, 1.0, 1.0};vector<double> low_in(a, a+3);vector<double> high_in(b, b+3);vector<double> low_out(c, c+3);vector<double> high_out(d, d+3);vector<double> gamma(e, e+3);ImageAdjust(src, dst, low_in, high_in, low_out, high_out, gamma);imshow("src", src);imshow("dst", dst);waitKey(0);} return 0;}
注意:☆处是将图像I中的亮度值映射为一个新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in 以下与 high_in 以上的值被截断了,其中 gamma指定描述值I和值J关系曲线的形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。 具体用法可以参考matlab中的imadjust。
经过修改输入的参数,程序可以跑出来以下的效果:
0 0
- opencv上Gamma调节的源码
- 如何通过调节gamma曲线以调节图像的对比度,亮度等参数
- 如何通过调节gamma曲线以调节图像的对比度,亮度等参数
- 如何通过调节gamma曲线以调节图像的对比度,亮度等参数
- 如何通过调节gamma曲线以调节图像的对比度,亮度等参数
- setDeviceGammaRamp调节 gamma ramp用法
- 调节亮度、对比度及gamma值实现彩色图像的亮度变换
- 基于CUDA和OpenCV实现的图像GAMMA变换
- CUDA和OpenCV实现的图像GAMMA变换
- CUDA和OpenCV实现的图像GAMMA变换
- OpenCV边缘检测的详细参数调节
- opencv图像的对比度、亮度调节
- codility上的问题之四 Gamma 2011
- Gamma校正及其OpenCV实现
- gamma校正(基于OpenCV)
- Mac上编译opencv源码
- 图像的Gamma(伽玛)校正的原理及OpenCV代码实现!
- OpenCV 亮度调节
- [leetcode]Two Sum
- 玩家交互体验—剑网3聊天系统
- 今天心情不错
- 深度优先搜索(DFS)
- 阶层之和
- opencv上Gamma调节的源码
- nyoj 115dijkstar求最短路
- Vs2010winform程序打包部署
- 正则表达式(系统)
- 将2612转换成时间和周一到周日
- HDU 1176 免费馅饼(dp)
- JBPM-工作流引擎
- jQuery Ajax 全解析
- tomcat内存溢出问题简单剖析