公式:

两个参数 \alpha > 0 和 \beta 一般称作 增益 和 偏置 参数。我们往往用这两个参数来分别控制 对比度 和 亮度 。

 

  1. #include "stdafx.h"
  2. #include<iostream>
  3. #include<thread>
  4. #include<vector>
  5. #include <opencv2/core/core.hpp>
  6. #include <opencv2/contrib/contrib.hpp>
  7. #include <opencv2/highgui/highgui.hpp>
  8. #include <opencv2/imgproc/imgproc.hpp>
  9. #include <opencv2/objdetect/objdetect.hpp>
  10.  
  11. using
    namespace cv;
  12. using
    namespace std;
  13.  
  14. int g_slider_position = 0, g_slider_position2 = 0;
  15. Mat image;
  16. Mat new_image;
  17. double alpha, beta;
  18.  
  19. void onTrackingbarSlide(int pos)
  20. {
  21.    new_image = Mat::zeros(image.size(), image.type());
  22.    beta = pos;
  23.    for (int y = 0; y < image.rows; y++)
  24.    {
  25.       for (int x = 0; x < image.cols; x++)
  26.       {
  27.          for (int c = 0; c < 3; c++)
  28.          {
  29.             //saturate_cast 防止数据溢出
  30.             new_image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha*(image.at<Vec3b>(y, x)[c]) + beta);
  31.          }
  32.       }
  33.    }
  34.  
  35.    imshow("New Image", new_image);
  36. }
  37.  
  38. void onTrackingbarSlide2(int pos)
  39. {
  40.    new_image = Mat::zeros(image.size(), image.type());
  41.  
  42.    alpha = (double)pos / 10.0;
  43.  
  44.    for (int y = 0; y < image.rows; y++)
  45.    {
  46.       for (int x = 0; x < image.cols; x++)
  47.       {
  48.          for (int c = 0; c < 3; c++)
  49.          {
  50.             //saturate_cast 防止数据溢出
  51.             new_image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha*(image.at<Vec3b>(y, x)[c]) + beta);
  52.          }
  53.       }
  54.    }
  55.  
  56.    imshow("New Image", new_image);
  57. }
  58.  
  59. int _tmain(int argc, _TCHAR* argv[])
  60. {
  61.    /// 读入用户提供的图像
  62.    image = imread("E:\\myImage\\sql.png");
  63.  
  64.    //初始化为0的数组
  65.    Mat new_image = Mat::zeros(image.size(), image.type());
  66.  
  67.    /// 初始化
  68.    cout << "* Enter the alpha value [1.0-3.0]: ";
  69.    cin >> alpha;
  70.    cout << "* Enter the beta value [0-100]: ";
  71.    cin >> beta;
  72.  
  73.    /// 创建窗口
  74.    namedWindow("Original Image", 1); // 1:WINDOW_AUTOSIZE
  75.    namedWindow("New Image", 1);
  76.  
  77.    cvCreateTrackbar("亮度(增益)", "New Image", &g_slider_position, 100, onTrackingbarSlide);
  78.    cvCreateTrackbar("对比度(偏置)", "New Image", &g_slider_position2, 30, onTrackingbarSlide2);
  79.  
  80.    /// 执行运算 new_image(i,j) = alpha*image(i,j) + beta
  81.    for (int y = 0; y < image.rows; y++)
  82.    {
  83.       for (int x = 0; x < image.cols; x++)
  84.       {
  85.          for (int c = 0; c < 3; c++)
  86.          {
  87.             //saturate_cast 防止数据溢出
  88.             new_image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha*(image.at<Vec3b>(y, x)[c]) + beta);
  89.          }
  90.       }
  91.    }
  92.  
  93.    /// 显示图像
  94.    imshow("Original Image", image);
  95.    imshow("New Image", new_image);
  96.  
  97.    /// 等待用户按键
  98.    waitKey();
  99.    return 0;
  100. }

 

 

参考:

http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/basic_linear_transform/basic_linear_transform.html#basic-linear-transform

http://blog.csdn.net/mjlsuccess/article/details/12401839

OpenCV(5) 对比度和亮度的更多相关文章

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

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

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

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

  3. C++ Opencv createTrackbar()创建滑动条实现对比度、亮度调节及注意事项

    一.对比度.亮度概念普及 1.1对比度 对比度指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量,差异范围越大代表对比越大,差异范围越小代表对比越小.对比度对视觉效果的影响非常关键,一般 ...

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

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

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

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

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

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

  7. opencv 3 core组件进阶(2 ROI区域图像叠加&图像混合;分离颜色通道、多通道图像混合;图像对比度,亮度值调整)

    ROI区域图像叠加&图像混合 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp&g ...

  8. OpenCV --- 修改图像的对比度、亮度 、RGB转Gray图像、修改图像的尺寸

    #include <opencv2/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgu ...

  9. 学习 opencv---(5) 创建Trackbar(活动条) &图像对比度,亮度值调整

    学习如何在opencv 中用trackbar 函数创建和使用 轨迹条,以及图像对比度,亮度值的动态调整 一.OpenCV中轨迹条(Trackbar)的创建和使用 [1]创建轨迹条-----create ...

随机推荐

  1. PHP常用函数大全。

    php usleep() 函数延迟代码执行若干微秒. unpack() 函数从二进制字符串对数据进行解包. uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID. time_sleep_ ...

  2. nfs 是Network File System 网络文件系统

    NFS的基本原刚是容许不同的客户端及服务通过一组PRC分享相同的文件系统,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享.NFS在文件传送过程中依赖于RPC协议.远程过程调用Rem ...

  3. route netstat -rn

    -n :不要使用通讯协定或主机名称,直接使用ip或port number; -ee:使用更详细的资讯来显示 [root@NB data]# route -nee Kernel IP routing t ...

  4. .net学习笔记----有序集合SortedList、SortedList<TKey,TValue>、SortedDictionary<TKey,TValue>

    无论是常用的List<T>.Hashtable还是ListDictionary<TKey,TValue>,在保存值的时候都是无序的,而今天要介绍的集合类SortedList和S ...

  5. 17.观察者模式(Observer Pattern)

    using System; using System.Collections.Generic; namespace ConsoleApplication10 { /// <summary> ...

  6. js自定义延迟执行函数

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. C# TreeView使用技巧

    节点勾选设置 TreeView树中节点勾选要求: 1.不选中一个节点,则其所有的子节点都不被选中. 2.选中一个节点,则其所有的子节点都被选中. 3.当一个节点的所有子节点都没有被选中时,该节点也没有 ...

  8. POJ3694 Network(Tarjan双联通分图 LCA 桥)

    链接:http://poj.org/problem?id=3694 题意:给定一个有向连通图,每次增加一条边,求剩下的桥的数量. 思路: 给定一个无向连通图,添加一条u->v的边,求此边对图剩余 ...

  9. 跟着鸟哥学Linux系列笔记0-如何解决问题

    跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1.  在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...

  10. 在Virtulbox上装Ubuntu

    做个程序员,会用Linux,这应该是最基本的要求吧.可惜本人经常用Windows,只是偶尔去服务器上做些操作的时候才接触到linux.so,我要学Linux.刚学所以还是先装个虚拟机吧,等在虚拟机上用 ...