目录

  • 前言:
  • 本篇学习内容:
  • 1.对比度调整、亮度调整
  • 2.离散傅里叶变换基本介绍
  • 参考文献:


前言:

笔者目前在校本科大二,有志于进行计算机视觉、计算机图形学方向的研究,准备系统性地、扎实的学习一遍OpenCV的内容,故记录学习笔记,同时,由于笔者同时学习数据结构、机器学习等知识,会尽量根据自己的理解,指出OpenCV的应用,并在加上自己理解的前提下进行叙述。
若有不当之处,希望各位批评、指正。


本篇学习内容:

1.对比度调整、亮度调整
2.离散傅里叶变换


1.对比度调整、亮度调整

对比度和亮度的调整可以整合在一个公式里:g(x) = af(x) + b
其中,f(x)是原图的像素值,a用于控制图像对比度,b用于控制图像亮度。
我们将这两个东西添加到滑动条里,复习一下滑动条,并看一下动态效果。

Mat srcimg;
Mat dstimg;
int contrastvalue;
int brightvalue;
static void func(int, void*) {

	for (int y = 0; y < srcimg.rows; y++) {
		for (int x = 0; x < srcimg.cols; x++) {
			for (int z = 0; z < 3; z++) {
dstimg.at<Vec3b>(y, x)[z] = 
saturate_cast<uchar>((srcimg.at<Vec3b>(y, x)[z]) * (contrastvalue * 0.01) + brightvalue);
			}
		}
	}
	imshow("原始图", srcimg);
	imshow("效果图", dstimg);
}
int main(){
	srcimg = imread("E:/program/x.jpg");
	dstimg = Mat::zeros(srcimg.size(), srcimg.type());
	contrastvalue = 100;
	brightvalue = 50;
	namedWindow("原始图", 1);
	namedWindow("效果图", 1);
	createTrackbar("对比度", "效果图", &contrastvalue, 300, func);
	createTrackbar("亮度", "效果图", &brightvalue, 200, func);
	func(contrastvalue, 0);
	func(brightvalue, 0);
	waitKey();
	return 0;
}

代码块中的saturate_cast()函数是一个模板函数。其作用是溢出保护,这里就是:将小于0的值变为0,将超出uchar的值(255)变为255。

下面是代码输出结果:

python opencv图片 亮度增强对比度增强 opencv亮度调节函数_ci

2.离散傅里叶变换基本介绍

我们为什么要进行离散傅里叶变换?
摘抄自《OpenCV3编程入门》的一段话:
在频域里面, 对于一幅图像, 高频部分代表了图像的细节、 纹理信息;低频
部分代表了图像的轮廓信息。 如果对一幅精细的图像使用低通滤波器, 那么滤波
后的结果就只剩下轮廓了。 这与信号处理的基本思想是相通的。 如果图像受到的
噪声恰好位于某个特定的 "频率 ” 范围内, 则可以通过滤波器来恢复原来的图像。
傅里叶变换在图像处理中可以做到图像增强与图像去噪、 图像分割之边缘检测、
图像特征提取、 图像压缩等。

由于现阶段的OpenCV学习中用不到傅里叶变换,所以在这里仅介绍傅里叶变换的意义。到需要应用傅里叶变换之时再进行详细介绍。