OpenCV图像自动缩放(Autoscaling)函数autoscaling()

发布于:2025-07-19 ⋅ 阅读:(12) ⋅ 点赞:(0)
  • 操作系统: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)−min⁡max⁡−min⁡×255\text{output}(x, y) = \frac{\text{input}(x, y) - \min}{\max - \min} \times 255output(x,y)=maxmininput(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;
}

运行结果

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到