OpenCV杂项图像变换(1)自适应阈值处理函数adaptiveThreshold()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

函数对数组应用自适应阈值。

该函数根据以下公式将灰度图像转换为二值图像:

  • 对于 THRESH_BINARY:
    t e x t d s t ( x , y ) = { maxValue 如果 src ( x , y ) > T ( x , y ) 0 否则 \\text{dst}(x, y) =\begin{cases}\ \text{maxValue} & \text{如果 } \text{src}(x, y) > T(x, y) \\ 0 & \text{否则} \end{cases} textdst(x,y)={ maxValue0如果 src(x,y)>T(x,y)否则

  • 对于THRESH_BINARY_INV:
    dst ( x , y ) = { 0 如果 src ( x , y ) > T ( x , y ) maxValue 否则 \text{dst}(x, y) = \begin{cases} 0 & \text{如果 } \text{src}(x, y) > T(x, y) \\ \text{maxValue} & \text{否则} \end{cases} dst(x,y)={0maxValue如果 src(x,y)>T(x,y)否则

    其中 T ( x , y ) T(x,y) T(x,y) 是为每个像素单独计算的阈值(参见 adaptiveMethod 参数)。

adaptiveThreshold() 函数是 OpenCV 中用于实现自适应阈值处理的一种方法。这种处理方式特别适用于照明条件变化较大的场景,因为它能够根据图像局部区域的亮度自动调整阈值。

该函数可以原地处理图像

函数原型

cpp 复制代码
void cv::adaptiveThreshold	
(
	InputArray 	src,
	OutputArray 	dst,
	double 	maxValue,
	int 	adaptiveMethod,
	int 	thresholdType,
	int 	blockSize,
	double 	C 
)		

参数

  • 参数src 源 8 位单通道图像。
  • 参数dst 目标图像,具有与 src 相同的大小和类型。
  • 参数maxValue 分配给满足条件的像素的非零值。
  • 参数adaptiveMethod 使用的自适应阈值算法,参见 AdaptiveThresholdTypes。使用 BORDER_REPLICATE | BORDER_ISOLATED 来处理边界。
  • 参数thresholdType 阈值类型,必须是 THRESH_BINARY 或 THRESH_BINARY_INV,参见 ThresholdTypes。
  • 参数blockSize 用于计算像素阈值的像素邻域大小:3, 5, 7 等等。
  • 参数C 从均值或加权均值中减去的常数(参见下面的详细信息)。通常它是正数,但也可能是零或负数。

代码示例

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main(int argc, char** argv)
{
    // 读取图像
    Mat image = imread("/media/dingxin/data/study/OpenCV/sources/images/sun2.jpg", IMREAD_GRAYSCALE);
    
    if (image.empty()) {
        std::cerr << "Error: Could not open or find the image." << std::endl;
        return -1;
    }
    
    // 创建输出图像
    Mat binaryImage;
    
    // 应用自适应阈值处理
    adaptiveThreshold(image, binaryImage, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 3, 2);
    
    // 显示结果
    namedWindow("Original Image", WINDOW_NORMAL);
    imshow("Original Image", image);
    
    namedWindow("Binary Image", WINDOW_NORMAL);
    imshow("Binary Image", binaryImage);
    
    waitKey(0);
    
    return 0;
}

运行结果

相关推荐
程序猿追1 分钟前
深度解码昇腾 AI 算力引擎:CANN Runtime 核心架构与技术演进
人工智能·架构
金融RPA机器人丨实在智能2 分钟前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
lili-felicity5 分钟前
CANN异步推理实战:从Stream管理到流水线优化
大数据·人工智能
做人不要太理性5 分钟前
CANN Runtime 运行时组件深度解析:任务下沉执行、异构内存规划与全栈维测诊断机制
人工智能·神经网络·魔珐星云
不爱学英文的码字机器6 分钟前
破壁者:CANN ops-nn 仓库与昇腾 AI 算子优化的工程哲学
人工智能
晚霞的不甘9 分钟前
CANN 编译器深度解析:TBE 自定义算子开发实战
人工智能·架构·开源·音视频
愚公搬代码9 分钟前
【愚公系列】《AI短视频创作一本通》016-AI短视频的生成(AI短视频运镜方法)
人工智能·音视频
哈__10 分钟前
CANN内存管理与资源优化
人工智能·pytorch
极新10 分钟前
智启新篇,智创未来,“2026智造新IP:AI驱动品牌增长新周期”峰会暨北京电子商务协会第五届第三次会员代表大会成功举办
人工智能·网络协议·tcp/ip
island131412 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络