OpenCV学习笔记基础篇(六):对比度调整、亮度调整、离散傅里叶变换基本介绍

前言:

笔者目前在校本科大二,有志于进行计算机视觉、计算机图形学方向的研究,准备系统性地、扎实的学习一遍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。
下面是代码输出结果:
在这里插入图片描述

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

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

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

参考文献:

  1. OpenCV官方文档:https://docs.opencv.org/4.x/
  2. 《OpenCV3编程入门》毛星云、冷雪飞等编著
  3. 《OpenCV4快速入门》冯振、郭延宁、吕跃勇著
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值