目录
1 概念讲解及用处
图像灰度的线性变换是指对彩色图像或灰度图像中的每个像素进行数学运算,通过调整像素的亮度值来改变图像的整体亮度和对比度。它广泛应用于图像增强、亮度调整、对比度增强等领域。
2 函数详解
OpenCV提供了以下函数用于图像灰度的线性变换:
- cv::cvtColor:用于颜色空间转换,将彩色图像转换为灰度图像。
- cv::convertScaleAbs:对输入图像进行缩放并将结果转换为8位无符号整型。
- cv::convertTo:对输入图像进行数据类型转换。
- cv::multiply:将图像中的每个像素与一个常数相乘。
- cv::addWeighted:将两幅图像按权重相加。
3 数学原理及数学推导公式
在图像灰度的线性变换中,常用的数学原理是缩放和平移。
缩放变换: 对于每个像素点(x,y),其灰度值Pout的计算公式为:
其中,α表示缩放因子,β表示平移因子,Pin表示输入图像中的像素值。
平移变换: 平移变换是指将图像中的每个像素值加上一个常数偏移量β,计算公式为:
4 用C++编写代码进行实现
下面是一个使用OpenCV实现图像灰度线性变换的示例代码:
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("input.jpg");
cv::Mat grayImage;
// 转换为灰度图像
cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);
double alpha = 1.5; // 缩放因子
double beta = 30; // 平移因子
// 灰度线性变换
cv::convertScaleAbs(grayImage, grayImage, alpha, beta);
cv::imshow("Input Image", image);
cv::imshow("Transformed Image", grayImage);
cv::waitKey(0);
return 0;
}
这段代码首先使用cv::imread函数读取一幅彩色图像,然后使用cv::cvtColor函数将彩色图像转换为灰度图像。接着,通过convertScaleAbs函数对灰度图像进行线性变换,其中alpha参数表示缩放因子,beta参数表示平移因子。最后,通过imshow函数显示原始图像和变换后的灰度图像。