【OpenCV】图片对比度和亮度
【知识点梳理
1、防止溢出
在opencv中,对计算式进行计算的时候经常会出现值溢出(上溢出或下溢出),尤其是对无符号数值进行加减操作时。opencv中使用Saturation Casting“转换很好的解决这个问题,使用saturate_cast<>(),opencv对数组或矩阵进行代数运算或其他操作时,会自动检测underflows and overflows,当结果上溢出时就会用最大的可用值代替,当下溢出时就会用最小的可用值代替。
2、创建全零矩阵图像
Mat new_image = Mat::zeros( image.size(), image.type() );
说明:新图像大小与类型与原图像相同,像素值为零。
3、图像线性变换
image.convertTo(new_image, -1, alpha, beta);
说明:相当于new_image =saturate_cast(alpha(∗this)(x,y)+beta).第二个参数是输出图像的类型或深度,如果为负则与输入图像的类型或深度相同。
4、图像指数变换
5、创建滑动控件
CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange = 0, void* userdata = 0); 参数一:trackbarname:滑动控件的名称;参数二:winname:滑动控件用于依附的图像窗口的名称;参数三:value:初始化阈值;参数四:count:滑动控件的刻度范围;参数五:TrackbarCallback是回调函数
代码示例
#include <iostream>
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"using namespace std;
using namespace cv;namespace
{/*全局变量*/int alpha = 100;int beta = 100;int gamma_cor = 100;Mat img_original, img_corrected, img_gamma_corrected;void basicLinearTransform(const Mat &img, const double alpha_, const int beta_) // 基本线性变换{Mat res;img.convertTo(res, -1, alpha_, beta_); // res = alpha_ * img + beta_ hconcat(img, res, img_corrected); // 连接矩阵,等同于:img_corrected = [img res]}void gammaCorrection(const Mat &img, const double gamma_){CV_Assert(gamma_ >= 0);Mat lookUpTable(1, 256, CV_8U); // 查找表uchar* p = lookUpTable.ptr();for (int i = 0; i < 256; ++i)p[i] = saturate_cast<uchar>(pow(i / 255.0, gamma_)*255.0); // pow()是幂次运算Mat res = img.clone();LUT(img, lookUpTable, res); // LUT hconcat(img, res, img_gamma_corrected);}void on_linear_transform_alpha_trackbar(int, void *) // alpha 控制条{double alpha_value = alpha / 100.0;int beta_value = beta - 100;basicLinearTransform(img_original, alpha_value, beta_value);}void on_linear_transform_beta_trackbar(int, void *){double alpha_value = alpha / 100.0;int beta_value = beta - 100;basicLinearTransform(img_original, alpha_value, beta_value);}void on_gamma_correction_trackbar(int, void *) // gamma 控制条{double gamma_value = gamma_cor / 100.0;gammaCorrection(img_original, gamma_value);}
}int main(int argc, char** argv)
{String imageName("../data/lena.jpg");img_original = imread(imageName);img_corrected = Mat(img_original.rows, img_original.cols * 2, img_original.type());img_gamma_corrected = Mat(img_original.rows, img_original.cols * 2,img_original.type());hconcat(img_original, img_original, img_corrected);hconcat(img_original, img_original, img_gamma_corrected);namedWindow("Brightness and contrast adjustments", WINDOW_AUTOSIZE);namedWindow("Gamma correction", WINDOW_AUTOSIZE);createTrackbar("Alpha gain (contrast)", "Brightness and contrast adjustments",&alpha,500, on_linear_transform_alpha_trackbar);createTrackbar("Beta bias (brightness)", "Brightness and contrast adjustments", &beta, 200, on_linear_transform_beta_trackbar);createTrackbar("Gamma correction", "Gamma correction", &gamma_cor, 200, on_gamma_correction_trackbar);while (true){imshow("Brightness and contrast adjustments", img_corrected);imshow("Gamma correction", img_gamma_corrected);int c = waitKey(30); // 延时30毫秒if (c == 27) // 按键escbreak;}return 0;
}
运行结果
【OpenCV】图片对比度和亮度相关推荐
- C# EmguCV 修改图片对比度、亮度
C# EmguCV 修改图片对比度.亮度 1.公式 g(x) = k*f(x)+b f(x) 原图片的像素点颜色 g(x)改变对比度后的像素点颜色 k 对比度改变系数 b 像素点增加的亮度 C# 代码 ...
- opencv关于对比度和亮度的误解
1 对比度与亮度概念 亮度调整:图像像素强度整体变高/变低. 对比度调整:图像暗处像素强度变低,图像亮处像素强度变高,从而拉大中间某个区域范围的显示精度. 通过设计一个映射曲线就可完成对比度.亮度调整 ...
- 转载:【opencv入门教程之六】创建Trackbar图片对比度、亮度值调整
[OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调整 浅墨_毛星云 2014-03-18 21:43:18 103746 收藏 21 最后发布:2014-03-18 ...
- python实现opencv学习七:粗略的调整图片对比度和亮度
代码: # -*- coding=GBK -*- import cv2 as cv import numpy as np# 粗略的调节对比度和亮度 def contrast_brightness_im ...
- 7、粗略的调整图片对比度和亮度
代码 解释都在注释里啦 import numpy as nm import cv2 as cv def adjust(img1,x,y):h,w,c=img1.shape#获得img1的参数heigh ...
- 对图片对比度和亮度的理解
对比度我们一般可以联想为:黑-----------白 ,就是变亮的过程 而亮度表示的则是颜色的明暗程度:主要针对的是颜色与颜色自身之间的变化,例如蓝色,有深蓝,有浅蓝,黑色有暗黑和纯黑 不知道这么单面 ...
- 2-opencv增加图片对比度和亮度
1-方法一 g(x) = a* f(x) +b 其中,a增加图像对比度(取值0.0-3.0),b增加图像亮度 #include <iostream> #include<opencv2 ...
- OpenCV—Python 对比度与亮度调整
对比度与亮度调整方法1 对图片对比度和亮度的调整一般通过下面公式计算: g(x,y)=a∗f(x,y)+bg(x,y) = a*f(x,y)+bg(x,y)=a∗f(x,y)+b f(x,y)f(x, ...
- OpenCV 图片亮度与对比度 轨迹条
#include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostre ...
最新文章
- HashSet中的add()方法( 五 )(详尽版)
- 实现点击下载文件的几种方法
- 清除绊脚石(不定期更新)
- 第 21 章 radiusd - Authentication, Authorization and Accounting server
- 小学身高体重测试软件,学生身高、体重检测汇总分析
- DeepFakes天敌来了!伯克利紧急研发“火眼金睛”防伪克星
- 张小龙做微信公众号APP,对自媒体是祸还是福?
- MIPS指令:常用R型、I型、J型指令编解码表
- uniapp下载文件保存到手机本地
- 【真的很先进】阿里云在2018-KVM Forum上分享的动态迁移实践
- 【转】用C#获取浏览文件夹对话框
- 【bug解决】No OpKernel was registered to support Op 'CudnnRNN' with these attrs.
- 安卓监听是否有闹钟设置
- 区块链项目数据存储系统分析
- 开放系统理论(3)生物的特征——热力学第二定律,和熵(2)续--有什么
- 68个经典励志小故事,让你终身受益[转]
- js写一个开心消消乐
- 制作京东快报页面html,HTML第6章上机练习3(制作京东快报页面)
- 2021年5月:百度最近的文章收录变慢了?连老站都不好使了?
- 人工智能 DFS 分啤酒问题 Java