OpenCV-图像处理(06、调整图像亮度与对比度)
理论
- 图像变换可以看作如下:
- 像素变换 – 点操作
- 邻域操作 – 区域
调整图像亮度和对比度属于像素变换-点操作
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() );
:创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0saturate_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、调整图像亮度与对比度)相关推荐
- opencv中如何调整图像亮度和对比度,以及亮度和对比度调整的原理
文章目录 1. 调整图像亮度和对比度的原理 2. python实现的一个代码如下,可以直接运行 3. 在opencv种调节图像和对比度的方法 a. opencv中的实现方法: b. 根据咱们的公式,我 ...
- 【opencv4】opencv视频教程 C++ 7、手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)
上一讲:[opencv4]opencv视频教程 C++ 6.图像混合.线性混合.混合权重相加addWeighted().混合加add().混合乘multiply() [opencv_C++] 入门强推 ...
- OpenCV(C++)---调整图像亮度和对比度
1.理论 图像变换可以看作如下: 像素变换 – 点操作 邻域操作 – 区域 调整图像亮度和对比度属于像素变换-点操作: 2.重要的API Mat new_image = Mat::zeros( ima ...
- 调整图像亮度与对比度
文章目录 理论 代码演示 理论 图像变换可以看作如下: 像素变换 – 点操作,用在调整图像亮度和对比度等操作上. 邻域操作 – 区域,用在图像卷积.特征提取.梯度计算.模式匹配识别.角点检测.模糊.平 ...
- 调整图像亮度和对比度
图像变换可以看做两部分: 像素操作: 1.点操作,一般用于提升图像整体的对比度等. 2.邻域操作,一般用于空间域滤波,提取特征. 调整图像亮度和对比度属于像素变换 g(i,j)=αf(i,j)+βg\ ...
- java 对比度_调整图像亮度、对比度、饱和度
完整代码如下: 1.主要方法编写类 package chapter4; import java.awt.image.BufferedImage; public class BSCAdjustFilte ...
- halcon中怎么降低图像亮度_第6课-调整图像亮度和对比度
(非原创,看课程自己做的笔记,防丢失放到个人空间的) 第6课-调整图像亮度和对比度理论 代码演示 1-理论 图像变换可以看做如下: -像素变换-点操作: -邻域操作-区域: 调整图像亮度和对比度属于像 ...
- 0.4-OpenCvSharp4调整图像亮度和对比度
0.4-OpenCvSharp4调整图像亮度和对比度 图像变换: 1)像素变换 – 点操作,用在调整图像亮度和对比度等操作上. 2)邻域操作 – 区域,用在图像卷积.特征提取.梯度计算.模式匹配识别. ...
- opencv 调整图像亮度和对比度
图像亮度 以灰度图像为例,图像亮度指的是图像的明暗程度,图像的像素值整体越接近于255,图像越亮,反之越接近于0,图像越暗. 图像对比度 假设灰度图像的像素值的范围为[a,b],如果b-a的值越接近于 ...
- 6. 调整图像亮度和对比度(OpenCV基础课程视频学习)
课程视频链接:https://www.bilibili.com/video/av29600072?p=7 内容 理论知识 代码 1. 理论知识 图像变换可以看作如下两种: 像素变换 -- 点操作,例如 ...
最新文章
- 前端javascript实现二进制读写操作
- UVA524 PrimeRingProblem素数环
- 被面试官问的Android问题难倒了,成功入职字节跳动
- sip hold 解决方法【原创】
- Android开发之内容提供者ContentProvider
- 教你win7关闭开机动画,大幅度加快开机时间
- android studio打包h5,Android Studio打包生成APK教程
- 量化策略回测DualThrust
- 供配电系统自动化实训
- echarts关系图vue完整代码
- 富爸爸穷爸爸第二章的思考
- CephFS MDS服务 高可用
- python怎么画卡通人物_Python绘制可爱的卡通人物 | 【turtle使用】
- Spring Boot整合Shiro + Springboot +vue
- 第七天 03.python环境安装
- 2021-2027中国电工仪器仪表市场现状及未来发展趋势
- Kafka为什么要抛弃ZooKeeper?
- IDEA的一些炫酷的插件
- 干货丨速度教你创建网页文件,实现HTML入门
- 想转行人工智能?机会来了!!!
热门文章
- 微信小程序教学第三章(含视频):小程序中级实战教程:列表-静态页面制作...
- win7/64位下python2.7、easy_install安装经验
- 关于ubuntu下无线网卡经常连不上网络的问题
- js或css文件后面跟参数的原因说明
- Java可变参数的使用
- oracle 19602,Oracle CPU Costing
- random随机数类
- python管道怎么使用_如何在多个流程中正确使用管道(2)
- 文件服务器报告,文件服务器报告
- 正在连接至zimperium服务器,ZIMPERIUM Mobile IPS (zIPS)