理论

  • 图像变换可以看作如下:

    • 像素变换 – 点操作
    • 邻域操作 – 区域
      调整图像亮度和对比度属于像素变换-点操作
      g(i,j)=αf(i,j)+βg(i,j) = αf(i,j) + βg(i,j)=αf(i,j)+β (其中 α>0,β是增益变量)
  • 重要的API
    • Mat new_image = Mat::zeros( image.size(), image.type() ); :创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0
    • saturate_cast(value);:确保值大小范围为0~255之间
    • Mat.at(y,x)[index]=value; :给每个像素点每个通道赋值

代码:

#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>using namespace std;
using namespace cv;int main(int argc,char** argv){Mat src=imread("E:/Experiment/OpenCV/Pictures/test.jpg");if(!src.data){cout<<"could not load image ..."<<endl;return -1;}char windows_name[]="input Image";namedWindow(windows_name,CV_WINDOW_AUTOSIZE);imshow(windows_name,src);//调整图像亮度与对比度int height=src.rows;int width=src.cols;float alpha = 1.2f;float beta = 10.f;Mat dst,convert, dst_convert;//cvtColor(src,src,CV_RGB2GRAY);//将src灰度处理//imshow(windows_name,src);dst=Mat::zeros(src.size(),src.type());//初始化对象src.convertTo(convert, CV_32F);//将其转化为 float 型数据dst_convert=Mat::zeros(src.size(),src.type());for(int row= 0; row < height; row++){for (int col= 0; col < width; col++){if(src.channels()==1){//单通道图像的处理int v=src.at<uchar>(row,col);dst.at<uchar>(row,col)=saturate_cast<uchar>(alpha*v + beta);//灰度图的计算}else if(src.channels()==3){//3通道图像处理int b = src.at<Vec3b>(row, col)[0];//注意只能用<Vec3b>,而不能用<Vec3f>int g = src.at<Vec3b>(row, col)[1];int r = src.at<Vec3b>(row, col)[2];dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(alpha*b + beta);//调整对比度与亮度,公式: g(i,j) = α*f(i,j)+β  其中 α>0, β是增益变量dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(alpha*g + beta);//图像越亮,颜色值越往255靠近dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(alpha*r + beta);//对比度: 就是两个像素点之间的差值,差值越大对比度越高,反之越低float f_b = convert.at<Vec3f>(row, col)[0];float f_g = convert.at<Vec3f>(row, col)[1];float f_r = convert.at<Vec3f>(row, col)[2];dst_convert.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(alpha*f_b + beta);//用float计算会比uchar精度高一些,值会大一点点dst_convert.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(alpha*f_g + beta);dst_convert.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(alpha*f_r + beta);}}}imshow("dst_Image",dst);imshow("dst_convert Image",dst_convert);waitKey(0);return 0;
}

运行结果

OpenCV-图像处理(06、调整图像亮度与对比度)相关推荐

  1. opencv中如何调整图像亮度和对比度,以及亮度和对比度调整的原理

    文章目录 1. 调整图像亮度和对比度的原理 2. python实现的一个代码如下,可以直接运行 3. 在opencv种调节图像和对比度的方法 a. opencv中的实现方法: b. 根据咱们的公式,我 ...

  2. 【opencv4】opencv视频教程 C++ 7、手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)

    上一讲:[opencv4]opencv视频教程 C++ 6.图像混合.线性混合.混合权重相加addWeighted().混合加add().混合乘multiply() [opencv_C++] 入门强推 ...

  3. OpenCV(C++)---调整图像亮度和对比度

    1.理论 图像变换可以看作如下: 像素变换 – 点操作 邻域操作 – 区域 调整图像亮度和对比度属于像素变换-点操作: 2.重要的API Mat new_image = Mat::zeros( ima ...

  4. 调整图像亮度与对比度

    文章目录 理论 代码演示 理论 图像变换可以看作如下: 像素变换 – 点操作,用在调整图像亮度和对比度等操作上. 邻域操作 – 区域,用在图像卷积.特征提取.梯度计算.模式匹配识别.角点检测.模糊.平 ...

  5. 调整图像亮度和对比度

    图像变换可以看做两部分: 像素操作: 1.点操作,一般用于提升图像整体的对比度等. 2.邻域操作,一般用于空间域滤波,提取特征. 调整图像亮度和对比度属于像素变换 g(i,j)=αf(i,j)+βg\ ...

  6. java 对比度_调整图像亮度、对比度、饱和度

    完整代码如下: 1.主要方法编写类 package chapter4; import java.awt.image.BufferedImage; public class BSCAdjustFilte ...

  7. halcon中怎么降低图像亮度_第6课-调整图像亮度和对比度

    (非原创,看课程自己做的笔记,防丢失放到个人空间的) 第6课-调整图像亮度和对比度理论 代码演示 1-理论 图像变换可以看做如下: -像素变换-点操作: -邻域操作-区域: 调整图像亮度和对比度属于像 ...

  8. 0.4-OpenCvSharp4调整图像亮度和对比度

    0.4-OpenCvSharp4调整图像亮度和对比度 图像变换: 1)像素变换 – 点操作,用在调整图像亮度和对比度等操作上. 2)邻域操作 – 区域,用在图像卷积.特征提取.梯度计算.模式匹配识别. ...

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

    图像亮度 以灰度图像为例,图像亮度指的是图像的明暗程度,图像的像素值整体越接近于255,图像越亮,反之越接近于0,图像越暗. 图像对比度 假设灰度图像的像素值的范围为[a,b],如果b-a的值越接近于 ...

  10. 6. 调整图像亮度和对比度(OpenCV基础课程视频学习)

    课程视频链接:https://www.bilibili.com/video/av29600072?p=7 内容 理论知识 代码 1. 理论知识 图像变换可以看作如下两种: 像素变换 -- 点操作,例如 ...

最新文章

  1. 前端javascript实现二进制读写操作
  2. UVA524 PrimeRingProblem素数环
  3. 被面试官问的Android问题难倒了,成功入职字节跳动
  4. sip hold 解决方法【原创】
  5. Android开发之内容提供者ContentProvider
  6. 教你win7关闭开机动画,大幅度加快开机时间
  7. android studio打包h5,Android Studio打包生成APK教程
  8. 量化策略回测DualThrust
  9. 供配电系统自动化实训
  10. echarts关系图vue完整代码
  11. 富爸爸穷爸爸第二章的思考
  12. CephFS MDS服务 高可用
  13. python怎么画卡通人物_Python绘制可爱的卡通人物 | 【turtle使用】
  14. Spring Boot整合Shiro + Springboot +vue
  15. 第七天 03.python环境安装
  16. 2021-2027中国电工仪器仪表市场现状及未来发展趋势
  17. Kafka为什么要抛弃ZooKeeper?
  18. IDEA的一些炫酷的插件
  19. 干货丨速度教你创建网页文件,实现HTML入门
  20. 想转行人工智能?机会来了!!!

热门文章

  1. 微信小程序教学第三章(含视频):小程序中级实战教程:列表-静态页面制作...
  2. win7/64位下python2.7、easy_install安装经验
  3. 关于ubuntu下无线网卡经常连不上网络的问题
  4. js或css文件后面跟参数的原因说明
  5. Java可变参数的使用
  6. oracle 19602,Oracle CPU Costing
  7. random随机数类
  8. python管道怎么使用_如何在多个流程中正确使用管道(2)
  9. 文件服务器报告,文件服务器报告
  10. 正在连接至zimperium服务器,ZIMPERIUM Mobile IPS (zIPS)