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

1.图像变换

---像素变换-点操作

---邻域操作-区域操作

调整图像亮度和对比度属于像素变换-点操作

公式为:g(i,j) = αf(i,j) + β 其中α>0 ,β是增益变量

处理图像经常会对图像色彩进行增强,这就是改变图像的亮度β和对比度α,

我们看看实例代码:

 #include<opencv2\opencv.hpp>
#include<iostream> using namespace std;
using namespace cv;
/*图像操作*/
int main(int argc, char **argv)
{
Mat src1 = imread("E:\\vsprom\\learn05\\v15.jpg"); if (src1.empty())
{
cout << "can not load imagefile1...." << endl;
return -;
}
namedWindow("in1 image win", CV_WINDOW_AUTOSIZE);
imshow("in1 image win", src1); int height = src1.rows;
int width = src1.cols; Mat dst = Mat::zeros(src1.size(), src1.type());//创建一副与src1同样的图像,并将像素值全部给0
float alpha = 1.2;
float beta = ;
for (int row = ; row < height; row++)
{
for (int col = ; col < width; col++)
{
if (src1.channels() == )//三通道图像
{
float b = src1.at<Vec3b>(row, col)[];//通道1
float g = src1.at<Vec3b>(row, col)[];//通道2
float r = src1.at<Vec3b>(row, col)[];//通道3 dst.at<Vec3b>(row, col)[] = saturate_cast<uchar>(b*alpha + beta);//使用公式
dst.at<Vec3b>(row, col)[] = saturate_cast<uchar>(g*alpha + beta);
dst.at<Vec3b>(row, col)[] = saturate_cast<uchar>(r*alpha + beta); }
else if (src1.channels() == )//单通道图像
{
float v = src1.at<uchar>(row, col);
dst.at<uchar>(row, col) = saturate_cast<uchar>(v*alpha + beta);
}
}
}
namedWindow("dst image win", CV_WINDOW_AUTOSIZE);
imshow("dst image win", dst); waitKey();
return ;
}

效果如下此时α=1.2,β=30

效果如下α=1.2,β=100时,此时更亮

效果如下α=5,β=30时,对比更明显

转换图像格式:

src2.convertTo(src1, CV_32F);

代码为:

#include<opencv2\opencv.hpp>
#include<iostream> using namespace std;
using namespace cv;
/*图像操作*/
int main(int argc, char **argv)
{
Mat src2 = imread("E:\\vsprom\\learn05\\v15.jpg"); if (src2.empty())
{
cout << "can not load imagefile1...." << endl;
return -;
}
namedWindow("in1 image win", CV_WINDOW_AUTOSIZE);
imshow("in1 image win", src2); Mat src1;
src2.convertTo(src1, CV_32F); int height = src1.rows;
int width = src1.cols; Mat dst = Mat::zeros(src2.size(), src2.type());//创建一副与src1同样的图像,并将像素值全部给0
float alpha = 1.2;
float beta = ;
for (int row = ; row < height; row++)
{
for (int col = ; col < width; col++)
{
if (src1.channels() == )//三通道图像
{
float b = src1.at<Vec3f>(row, col)[];//通道1
float g = src1.at<Vec3f>(row, col)[];//通道2
float r = src1.at<Vec3f>(row, col)[];//通道3
//修改像素值
dst.at<Vec3b>(row, col)[] = saturate_cast<uchar>(b*alpha + beta);
dst.at<Vec3b>(row, col)[] = saturate_cast<uchar>(g*alpha + beta);
dst.at<Vec3b>(row, col)[] = saturate_cast<uchar>(r*alpha + beta); }
else if (src1.channels() == )//单通道图像
{
float v = src1.at<uchar>(row, col);
dst.at<uchar>(row, col) = saturate_cast<uchar>(v*alpha + beta);
}
}
}
namedWindow("dst image win", CV_WINDOW_AUTOSIZE);
imshow("dst image win", dst); waitKey();
return ;
}

效果图:

跟我一起学opencv 第五课之调整图像亮度和对比度的更多相关文章

  1. 跟我一起学opencv 第五课之图像的混合

    *理论-线性混合操作 g(x) = (1-α)f0(x)+αf1(x)  α的取值范围位0-1之间  f0(x)为图像1,f1(x)表示第二张图像 α是混合系数   g(x)是生成的图像,对每一个像素 ...

  2. openCV - 5~7 图像混合、调整图像亮度与对比度、绘制形状与文字

    5. 图像混合 理论-线性混合操作.相关API(addWeighted) 理论-线性混合操作 用到的公式 (其中 α 的取值范围为0~1之间) 相关API(addWeighted) 参数1:输入图像M ...

  3. 跟我一起学opencv 第四课之图像的基本操作

    1.图像是由像素组成的,所以修改了像素就可以实现图像的改变. 2先看灰度图像(单通道): *****2.获取灰度图像的像素值使用:  int gray = gray_src.at<uchar&g ...

  4. 跟我一起学opencv 第三课之图像在opencv中的表示-Mat对象

    1.下面第一章图是一位美女图像,和其他数据一样图像在计算机中也是以二进制存储,下面第二张图 2.在摄像头眼里一幅图像就是一个矩阵或者说是二维数组,数组元素是像素值 3.opencv中以Mat对象表示图 ...

  5. linux就该这么学,第五课,

    今天讲的比较难理解,要重预习和复习 今天讲了2个多小进,主要讲了SHELL,shell的组成:第一行为脚本声明 #!/bin/bash   ,第二行为脚本的注释信息,第三为 脚本的执行语句 接收用户参 ...

  6. 快学Scala 第五课 (构造映射,获取映射值,更新映射值,迭代映射,与Java互操作)

    构造映射: val score = Map[String, Int]() val score1 = HashMap[String, Int]() val value1 = Map[String, In ...

  7. 从零开始学Kotlin第五课

    函数式编程入门: package EL fun main(args: Array<String>) { var names= listOf<String>("tom& ...

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

    图像变换可以看作如下: - 像素变换 – 点操作 - 邻域操作 – 区域 调整图像亮度和对比度属于像素变换-点操作 //创建一张跟原图像大小和类型一致的空白图像.像素值初始化为0 Mat new_im ...

  9. 【C语言探索之旅】 第二部分第五课:预处理

    内容简介 1.课程大纲 2.第二部分第五课: 预处理 3.第二部分第六课预告:   创建你自己的变量类型 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语 ...

随机推荐

  1. Nginx与Lua

    http://www.cnblogs.com/xd502djj/archive/2012/11/20/2779598.html 今天安装lua试试,这个从开始装的,发现一篇文字,字数虽少,但是却讲的很 ...

  2. .Net core Web API导出数据到Excel

    前言 产品经理有一个需求,就是将cosmosDB里的数据,导出到Excel中. 1.新建一个.net core web api controller 添加引用:EPPlus.Core Install- ...

  3. Django—models相关操作

    一.在django后台admin管理页面添加自己增加的表结构 通过终端命令:python3 manage.py makemigrations, python3 manage.py migrate 我们 ...

  4. MyBatis的增删改查。

    数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改,并且对程序接口做了一些调整,以及对一些问题进行了解答. 1.调整后的结构图: 2.连接数据库文件配置分离: 一般的程序都会把连 ...

  5. 【Richard 的刷(水)题记录】

    大概想了想,还是有个记录比较好. 9/24 网络流一日游: 最大流:bzoj1711[Usaco2007 Open]Dining 拆点 BZOJ 3993 Sdoi2015 星际战争 二分 P.S.这 ...

  6. BZOJ_2124_等差子序列_线段树+Hash

    BZOJ_2124_等差子序列_线段树+Hash Description 给一个1到N的排列{Ai},询问是否存在1<=p1<p2<p3<p4<p5<…<pL ...

  7. CocoaPods 安装 使用&常见操作错误

    CocoaPods 安装 使用 1.开启 terminal 2.移除现有 Ruby 默认源 $ gem sources --remove https://rubygems.org/ 3.使用新的源 $ ...

  8. a标签跳转之前加点击事件

    ①在html标签中出现提示 <a href="http://www.baidu.com" onclick="if(confirm('确认百度吗?')==false) ...

  9. .Net小白离开校园的第一年

    Why? 2018的已经步入尾声,对新的一年又是充满期待. 在这年底里,看到园子里有很多园友写了博客回顾自己的2018,本人自知文笔和各位前辈比不了,但是我也想来写一写,这是我特殊的第一年,记录下来, ...

  10. 从零开始学TensorFlow

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 最近在学习TensorFlow的相关知识,了解了Te ...