- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
该函数用于对输入图像进行自动缩放(Autoscaling),即根据输入图像的像素值范围将其线性映射到一个新的范围内(例如 [0, 255]),从而增强图像的对比度。
这属于一种**强度变换(Intensity Transformation)**方法,常用于图像处理中改善图像视觉效果或为后续处理做准备。
此函数会计算输入图像的最小值和最大值。
然后将图像的像素值线性地拉伸到目标范围(通常是 0 到 255 的 uchar 范围)。
相当于执行了以下公式:
output(x,y)=input(x,y)−minmax−min×255\text{output}(x, y) = \frac{\text{input}(x, y) - \min}{\max - \min} \times 255output(x,y)=max−mininput(x,y)−min×255如果输入是浮点型图像(如 CV_32F 或 CV_64F),这个操作尤其有用。
函数原型
void cv::intensity_transform::autoscaling
(
const Mat input,
Mat & output
)
参数
参数名 | 类型 | 含义 |
---|---|---|
input | const Mat | 输入图像矩阵。支持单通道或多通道图像,但通常用于灰度图。 |
output | Mat& | 输出图像矩阵,与输入图像尺寸和类型相同,但像素值被自动缩放到新范围(如 0~255)。 |
应用场景:
- 图像增强(提高对比度)
- 预处理步骤(如用于机器学习、计算机视觉任务)
- 可视化浮点图像数据(如梯度图、深度图等)
示例代码
#include <opencv2/intensity_transform.hpp>
#include <opencv2/opencv.hpp>
int main()
{
// 读取图像(灰度图)
cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );
cv::Mat result;
// 转换为浮点型图像以便处理
cv::Mat floatImg;
img.convertTo( floatImg, CV_32F );
// 自动缩放
cv::intensity_transform::autoscaling( floatImg, result );
// 将结果转换回 8U 类型显示
cv::Mat finalResult;
result.convertTo( finalResult, CV_8U );
// 显示结果
cv::imshow( "Original", img );
cv::imshow( "Auto-scaled", finalResult );
cv::waitKey( 0 );
return 0;
}