1. // define head function
  2. #ifndef PS_ALGORITHM_H_INCLUDED
  3. #define PS_ALGORITHM_H_INCLUDED
  4. #include <iostream>
  5. #include <string>
  6. #include "cv.h"
  7. #include "highgui.h"
  8. #include "cxmat.hpp"
  9. #include "cxcore.hpp"
  10. #include "math.h"
  11. using namespace std;
  12. using namespace cv;
  13. void Show_Image(Mat&, const string &);
  14. #endif // PS_ALGORITHM_H_INCLUDED
  15. /*
  16. Adjust bias and gain.
  17. */
  18. #include "PS_Algorithm.h"
  19. float Bias(float a, float b);
  20. float Gain(float a, float b);
  21. int main()
  22. {
  23. string Image_name("4.jpg");
  24. Mat Img=imread(Image_name.c_str());
  25. Mat Img_out(Img.size(), CV_32FC3);
  26. float gain_val = 0.75; // 0-1
  27. float bias_val = 0.25; // 0-1
  28. int width=Img.cols;
  29. int height=Img.rows;
  30. float val;
  31. for (int y=0; y<height; y++)
  32. {
  33. for (int x=0; x<width; x++)
  34. {
  35. for (int k=0; k<3; k++)
  36. {
  37. val=(float)Img.at<Vec3b>(y, x)[k]/255;
  38. val=Gain(val, gain_val);
  39. Img_out.at<Vec3f>(y, x)[k]=Bias(val, bias_val);
  40. }
  41. }
  42. }
  43. Show_Image(Img_out, "New_img");
  44. cout<<"All is well."<<endl;
  45. waitKey();
  46. }
  47. float Bias(float a, float b)
  48. {
  49. float y;
  50. a=pow(a, log(b)/log(0.5));
  51. y=a/((1.0f/b-2)*(1.0f-a)+1);
  52. return y;
  53. }
  54. float Gain(float a, float b)
  55. {
  56. /*
  57. float p = log(1.0 - b) / log(0.5);
  58. if (a < .001)
  59. return 0.0f;
  60. else if (a > .999)
  61. return 1.0f;
  62. if (a < 0.5)
  63. return pow(2 * a, p) / 2;
  64. else
  65. return 1.0f - pow(2 * (1. - a), p) / 2;
  66. */
  67. float c = (1.0f/b-2.0f) * (1.0f-2.0f*a);
  68. if (a < 0.5)
  69. return a/(c+1.0f);
  70. else
  71. return (c-a)/(c-1.0f);
  72. }
  73. // define the show image
  74. #include "PS_Algorithm.h"
  75. #include <iostream>
  76. #include <string>
  77. using namespace std;
  78. using namespace cv;
  79. void Show_Image(Mat& Image, const string& str)
  80. {
  81. namedWindow(str.c_str(),CV_WINDOW_AUTOSIZE);
  82. imshow(str.c_str(), Image);
  83. }

图像效果可以参考:

http://blog.csdn.net/matrix_space/article/details/46790171

Opencv— — Bias and Gain的更多相关文章

  1. 立体匹配:关于理解middlebury提供的立体匹配代码后的精减

    Middlebury立体匹配源码总结 优化方法 图像可否预处理 代价计算可否采用BT方式 可选代价计算方法 可否代价聚合 可否MinFilter优化原始代价 WTA-Box 可以 可以 AD/SD 可 ...

  2. PS 图像调整— — gain and bias

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=im ...

  3. opencv学习笔记-图像对比度、亮度调节

    在数学中我们学过线性理论,在图像亮度和对比度调节中同样适用,看下面这个公式: 在图像像素中其中: 参数f(x)表示源图像像素. 参数g(x) 表示输出图像像素. 参数a(需要满足a>0)被称为增 ...

  4. opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整

    http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调 ...

  5. Opencv学习笔记4:Opencv处理调整图片亮度和对比度

    一.理论基础 在数学中我们学过线性理论,在图像亮度和对比度调节中同样适用,看下面这个公式: 在图像像素中其中: 参数f(x)表示源图像像素. 参数g(x) 表示输出图像像素. 参数a(需要满足a> ...

  6. OpenCV学习:改变图像的对比度和亮度

    本实例演示简单地改变图像的对比度和亮度,使用了如下线性变换来实现像素值的遍历操作: The parameters α > 0 and β often called the gain and bi ...

  7. OpenCV入门:(五:更改图片对比度和亮度)

    1. 理论 图片的转换就是将图片中的每个像素点经过一定的变换,得到新像素点,新像素点组合成一张新的图片. 改变图片对比度和亮度的变换如下: 其中α和β被称作增益参数(gain parameter)和偏 ...

  8. opencv调整图像亮度对比度

    图像处理 图像变换就是找到一个函数,把原始图像矩阵经过函数处理后,转换为目标图像矩阵. 可以分为两种方式,即像素级别的变换和区域级别的变换 Point operators (pixel transfo ...

  9. OpenCV之Core组件进阶

    颜色空间缩减 利用C++类型转换时向下取整操作,实现定义域内颜色缩减.表达式如下 Inew = (Iold/10)*10 简单的颜色空间缩减算法可由以下两步组成: (1)遍历图像矩阵的每个元素 (2) ...

随机推荐

  1. iOS -- YYText富文本

    NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString: [NSString strin ...

  2. [置顶] Android 应用内禁止截屏功能的实现

    截图介绍   Android的调试工具DDMS提供有截屏功能,很多软件也会有截屏功能,在做支付等安全类应用的时候,为了保证用户的资产和系统安全,往往会禁止应用内截屏,禁止之后,在此应用处于前台的情况下 ...

  3. TCP通过滑动窗口和拥塞窗口实现限流,能抵御ddos攻击吗

    tcp可以通过滑动窗口和拥塞算法实现流量控制,限制上行和下行的流量,但是却不能抵御ddos攻击. 限流只是限制访问流量的大小,是无法区分正常流量和异常攻击流量的. 限流可以控制本软件或者应用的流量大小 ...

  4. maven运行update命令时报org/apache/maven/shared/filtering/MavenFilteringException错误

           在eclipse中对准项目运行maven->update project命令时报错:org/apache/maven/shared/filtering/MavenFiltering ...

  5. jdk8之永久区Permanent区参数设置分析

    jdk8之永久区Permanent区参数设置分析 学习了:https://blog.csdn.net/wuhenzhangxing/article/details/78224905 jdk7中可以进行 ...

  6. SQL中Inserted 和Deleted表 以及触发Trigger

    什么是Inserted 和Deleted表 他们有什么用 trigger 的简单实用 1.什么是Inserted 和Deleted表 当插入数据的时候,其实是同时向目的表 和inserted表中插入数 ...

  7. C++学习总结2

    链接上一篇日志,下面介绍下C++里面的其他内容 补充上一届里面的异常处理代码: try { cout << "try num" << endl; throw ...

  8. mac os PHP 访问MSSQL

    写在前: 项目的数据库是sql server,但是自己的系统是mac os.这样导致了需要一个烦人的系统环境搭建过程.目前要在mac 上的php环境中支持mssql环境访问,经过自己了解,有两种方式: ...

  9. javascript变量初始化位置

    变量在之前<script type="text/javascript"></script>(或引用的js文件)中初始化,可以正常访问. 运行程序:弹出123 ...

  10. python(10)- 字符编码

    一 什么是编码? 基本概念很简单.首先,我们从一段信息即消息说起,消息以人类可以理解.易懂的表示存在.我打算将这种表示称为“明文”(plain text).对于说英语的人,纸张上打印的或屏幕上显示的英 ...