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()

[opencv_C++] 入门强推!!!【B站最全】

文章目录

亮度与对比度公式(点操作与邻域操作概念)

公式中α影响对比度,β影响亮度(α影响相邻像素之间的差值,差值越大,对比度越大;β影响整体像素的值,整体增大则亮度增大)

点操作如调整图像亮度和对比度

邻域操作如图像卷积、特征提取、梯度、模式识别、角点检测、模糊、平滑之类的

重要的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)

福利2020最新C++全套视频教程