OpenCV(5) 对比度和亮度

?

公式:

两个参数 \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

时间: 2024-10-29 19:11:09

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

opencv之对比度和亮度的调节

opencv之对比度和亮度的调节 公式 \[ g(x) = a*f(x) + b\] 注:\(f(x)\) 为输入图像, \(g(x)\) 为输出图像. 注:\(a\)为增益,用于控制图像的对比度: \(b\)为偏置,用于控制图像的亮度. 代码 for (int y = 0; y < image.rows; ++y) { for (int x = 0; x < image.cols; ++x) { for (int c = 0; c < image.channel; ++c) { new

【OpenCV入门教程之六】 创建Trackbar &amp; 图像对比度、亮度值调整(转)

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/21479533 作者:毛星云(浅墨)    邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.8 这篇文章中我们一起学习了如何在OpenCV中用createTrackbar函数创建和使用轨迹条,以及图像对比度.亮度值的动态调整. 文章首先详细讲解了OpenCV2.0中的新版创建轨迹条的函数c

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

http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调整 标签: opencvvs2010c++图像处理 2014-03-18 21:43 43189人阅读 评论(99) 收藏 举报  分类: [OpenCV](18)  目录(?)[+] 本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qian

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

1. 理论 图片的转换就是将图片中的每个像素点经过一定的变换,得到新像素点,新像素点组合成一张新的图片. 改变图片对比度和亮度的变换如下: 其中α和β被称作增益参数(gain parameter)和偏差参数(bias parameter),分别控制对比度和亮度. 2. 实现代码 使用上述公式实现改变对比度和亮度的代码如下: void ContrastAndBrightness(const Mat& Src,Mat& Dst,double alpha,double beta) { Dst =

【opencv入门之四】Trackbar、图像对比度、亮度值调整

参考网站: http://blog.csdn.net/poem_qianmo/article/details/21479533 1.轨迹条(Trackbar) createTrackbar函数(创建轨迹条) 注意:它会和一个回调函数配合使用 C++: int createTrackbar(conststring& trackbarname, conststring& winname, int* value, int count, TrackbarCallback onChange=0, v

9.调整图像的对比度和亮度

//调整对比度和亮度 int g_nContrastValue; int g_nBrightValue; Mat g_srcImage_Contrast; Mat g_dstImage_Contrast; //滑动条事件处理函数 void on_ContrastAndBright(int,void*) { for(int x=0;x<g_srcImage_Contrast.rows;x++) { for(int y=0;y<g_srcImage_Contrast.cols;y++) { for

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

学习如何在opencv 中用trackbar 函数创建和使用 轨迹条,以及图像对比度,亮度值的动态调整 一.OpenCV中轨迹条(Trackbar)的创建和使用 [1]创建轨迹条-----createTrackbar 函数详解 createTrackbar这个函数我们以后会经常用到,它创建一个可以调整的轨迹条,并将轨迹条附加到指定的窗口上,使用起来方便,首先,它往往会和一个回调函数 配合起来使用,先看它的函数原型: 1 int createTrackbar(conststring &tracke

图像对比度和亮度

图像亮度通俗理解便是图像的明暗程度,数字图像 f(x,y) = i(x,y) r(x, y) ,如果灰度值在[0,255]之间,则 f 值越接近0亮度越低,f 值越接近255亮度越高.而且我们也要把亮度和对比度区分开来,正如上述提的对比度指的是最高和最低灰度级之间的灰度差. 饱和度指的是图像颜色种类的多少, 上面提到图像的灰度级是[Lmin,Lmax],则在Lmin.Lmax 的中间值越多,便代表图像的颜色种类多,饱和度也就更高,外观上看起来图像会更鲜艳,调整饱和度可以修正过度曝光或者未充分曝光

[Android] 使用Matrix矩阵类对图像进行缩放、旋转、对比度、亮度处理

    前一篇文章讲述了Android拍照.截图.保存并显示在ImageView控件中,该篇文章继续讲述Android图像处理技术,主要操作包括:通过打开相册里的图片,使用Matrix对图像进行缩放.旋转.移动.对比度.亮度.饱和度操作,希望对大家有所帮助. 一. 显示打开图片     首先,设置activity_main.xml布局如下所示: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android