cvAdaptiveThreshold用法(opencv参考手册)

AdaptiveThreshold

自适应阈值方法

void cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value,
                          int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,
                          int threshold_type=CV_THRESH_BINARY,
                          int block_size=3, double param1=5 );
src
输入图像.
dst
输出图像.
max_value
使用 CV_THRESH_BINARY 和 CV_THRESH_BINARY_INV 的最大值.
adaptive_method
自适应阈值算法使用:CV_ADAPTIVE_THRESH_MEAN_C 或 CV_ADAPTIVE_THRESH_GAUSSIAN_C (见讨论).
threshold_type
取阈值类型:必须是下者之一
  • CV_THRESH_BINARY,
  • CV_THRESH_BINARY_INV
block_size
用来计算阈值的象素邻域大小: 3, 5, 7, ...
param1
与方法有关的参数。对方法 CV_ADAPTIVE_THRESH_MEAN_C 和 CV_ADAPTIVE_THRESH_GAUSSIAN_C, 它是一个从均值或加权均值提取的常数(见讨论), 尽管它可以是负数。

函数 cvAdaptiveThreshold 将灰度图像变换到二值图像,采用下面公式:

threshold_type=CV_THRESH_BINARY:
dst(x,y) = max_value, if src(x,y)>T(x,y)
           0, otherwise

threshold_type=CV_THRESH_BINARY_INV:
dst(x,y) = 0, if src(x,y)>T(x,y)
           max_value, otherwise

其中 TI 是为每一个象素点单独计算的阈值

对方法 CV_ADAPTIVE_THRESH_MEAN_C,先求出块中的均值,再减掉param1。

对方法 CV_ADAPTIVE_THRESH_GAUSSIAN_C ,先求出块中的加权和(gaussian), 再减掉param1。

#include <cv.h>
#include <highgui.h>
#include <math.h>
IplImage* Igray = 0;
IplImage* It = 0;
IplImage* Iat;
IplImage* Ibt;
void main()
{
	Igray = cvLoadImage("f:\\1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
	It = cvCreateImage(cvSize(Igray->width, Igray->height),IPL_DEPTH_8U, 1);
	Iat = cvCreateImage(cvSize(Igray->width, Igray->height),IPL_DEPTH_8U, 1);
	Ibt = cvCreateImage(cvSize(Igray->width, Igray->height),IPL_DEPTH_8U, 1);
	cvThreshold(Igray, It, 50, 255,CV_THRESH_BINARY);
	cvAdaptiveThreshold(Igray, Iat, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 7, 5);
	cvAdaptiveThreshold(Igray, Ibt, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 7, 5);
	cvNamedWindow("orignal", 1);
	cvNamedWindow("threshold", 1);
	cvNamedWindow("adaptiveThresh", 1);
	cvNamedWindow("adaptiveThresh1", 1);
	cvShowImage("orignal", Igray);
	cvShowImage("threshold", It);
	cvShowImage("adaptiveThresh", Iat);
	cvShowImage("adaptiveThresh1", Ibt);
	cvWaitKey(0);
	cvReleaseImage(&Igray);
	cvReleaseImage(&It);
	cvReleaseImage(&Iat);
	cvReleaseImage(&Ibt);
	cvDestroyWindow("orignal");
	cvDestroyWindow("threshold");
	cvDestroyWindow("adaptiveThresh");
	cvDestroyWindow("adaptiveThresh1");
}


内容主要借鉴自openCV第五章/图像处理 -- 阈值化(自适应) - cartoonface的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/cartoonface/article/details/6011334

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
OpenCV中,图像区域划分可以通过图像阈值化分割来实现。图像阈值化分割是一种基本操作,它按照灰度级对像素集合进行划分,使得每个子集形成一个与现实景物相对应的区域。这种分割方法计算简单、运算效率较高、速度快、性能较稳定,因此成为图像分割中最基本和应用最广泛的技术。 在OpenCV中,有两种常用的图像阈值化分割方法:全局阈值和自适应阈值。全局阈值方法将整个图像划分为两个区域,一个区域是目标,另一个区域是背景。该方法适用于目标和背景占据不同灰度级范围的图像。自适应阈值方法根据图像的局部特征来确定阈值,可以处理目标和背景灰度变化较大的图像。在自适应阈值方法中,使用Otsu算法(大律法或最大类间方差法)来计算全局阈值,并根据该阈值进行二值化。 在OpenCV中,可以使用cvThreshold函数来进行全局阈值化分割。该函数接收灰度图像作为输入,并将像素值小于阈值的像素设为0,大于等于阈值的像素设为最大值。具体调用方式为cvThreshold(src, dst, threshold, max_value, threshold_type),其中src是输入图像,dst是输出图像,threshold是阈值,max_value是最大值,threshold_type是阈值类型。 另外,OpenCV还提供了cvAdaptiveThreshold函数来进行自适应阈值化分割。该函数首先使用Otsu算法计算出全局阈值,然后根据该阈值进行二值化。cvAdaptiveThreshold函数的调用方式为cvAdaptiveThreshold(src, dst, max_value, adaptive_method, threshold_type, block_size, param1),其中src是输入图像,dst是输出图像,max_value是最大值,adaptive_method是自适应方法(可选参数,默认为CV_ADAPTIVE_THRESH_MEAN_C),threshold_type是阈值类型(可选参数,默认为CV_THRESH_BINARY),block_size是块大小(可选参数,默认为3),param1是参数(可选参数,默认为5)。 综上所述,在OpenCV中,可以使用图像阈值化分割方法进行图像区域划分。具体使用全局阈值还是自适应阈值取决于图像的特点和需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Opencv 图像分割: 阈值化分割 区域分割 边缘分割](https://blog.csdn.net/keen_zuxwang/article/details/72765070)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值