OpenCV图像自动缩放(Autoscaling)函数autoscaling()
- 操作系统: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;
}