opencv4opencv视频教程 C++ 7手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)
Posted Dontla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv4opencv视频教程 C++ 7手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)相关的知识,希望对你有一定的参考价值。
上一讲:【opencv4】opencv视频教程 C++ 6、图像混合、线性混合、混合权重相加addWeighted()、混合加add()、混合乘multiply()
文章目录
亮度与对比度公式(点操作与邻域操作概念)
公式中α影响对比度,β影响亮度(α影响相邻像素之间的差值,差值越大,对比度越大;β影响整体像素的值,整体增大则亮度增大)
点操作如调整图像亮度和对比度
邻域操作如图像卷积、特征提取、梯度、模式识别、角点检测、模糊、平滑之类的
重要的api
代码演示:提高图像对比度
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, const char* argv[])
Mat src, dst;
src = imread("./test.jpg");
//src = imread("./test.jpg", IMREAD_GRAYSCALE);
//cvtColor(src, src, COLOR_BGR2GRAY);
//if (src.empty())
if (!src.data)
printf("could not load image...\\n");
return -1;
namedWindow("input img"); //默认自动窗口大小
imshow("input img", src);
Mat m1;
src.convertTo(m1, CV_32F); //转换成32位浮点数据类型
//src.convertTo(dst, CV_32F, 1 / 255.0);
int height = src.rows;
int width = src.cols;
int sc = src.channels();
dst = Mat::zeros(src.size(), src.type());
float alpha = 1.8;
float beta = -50;
for (int row = 0; row < height; row++)
for (int col = 0; col < width; col++)
for (int c = 0; c < 3; c++) //三个通道
if (sc == 3)
float b = m1.at<Vec3f>(row, col)[0]; //34.0000000
float g = m1.at<Vec3f>(row, col)[1]; //14.0000000
float r = m1.at<Vec3f>(row, col)[2];
dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b * alpha + beta);
dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g * alpha + beta);
dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r * alpha + beta);
else if (sc == 1)
float v = m1.at<float>(row, col);
dst.at<uchar>(row, col) = saturate_cast<uchar>(v * alpha + beta);
imshow("output img", dst);
waitKey(0);
return 0;
VS编译运行结果:
以上是关于opencv4opencv视频教程 C++ 7手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)的主要内容,如果未能解决你的问题,请参考以下文章
opencv4opencv视频教程 C++(opencv教程)2加载,修改,保存图像
opencv4opencv视频教程 C++(opencv教程)1opencv介绍和环境搭建
opencv4opencv视频教程 C++(opencv教程)3矩阵的掩膜操作(filter2D)
opencv4opencv教程 C++ 4Mat对象(深拷贝:clone()copyTo(),create()创建图片,zeros()eye()初始化空白图像,Scalar()创建向量)
opencv4opencv视频教程 C++ 5读写图像imreadimwrite读写像素at<>()修改像素值ROI区域选择(图像裁剪)RectVec3b与Vec3FCV_32F)