12基于opencv的固定阈值分割_自适应阈值分割

来源:互联网 发布:淘宝店怎么刷流量群 编辑:程序博客网 时间:2024/05/24 02:01

固定阈值分割、自适应阈值分割

一、threshold()函数

1.1 threshold()函数各参数详解

doublethreshold(InputArray src,OutputArray dst,double thresh,double maxval,int type)

Ø  第一个参数,InputArray类型的src,输入数组,填单通道 , 8或32位浮点类型的Mat即可。

Ø  第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放输出结果,且和第一个参数中的Mat变量有一样的尺寸和类型。

Ø  第三个参数,double类型的thresh,阈值的具体值。

Ø  第四个参数,double类型的maxval,当第五个参数阈值类型type取 THRESH_BINARY 或THRESH_BINARY_INV阈值类型时的最大值.

Ø  第五个参数,int类型的type,阈值类型。

第五参数有以下几种类型

0: THRESH_BINARY  当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0

1: THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval

2: THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变

3: THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0

4:THRESH_TOZERO_INV  当前点值大于阈值时,设置为0,否则不改变

 

1.2调用示例 

Mat ScrImage, OutImage, OutImage1, OutImage2, OutImage3;

ScrImage = imread("E:\\1TJQ\\Opencv\\Images\\image1.jpg");

threshold(ScrImage, OutImage1, 200, 255, CV_THRESH_BINARY);//固定阈值分割

imshow("【固定阈值处理:二值化】", OutImage1);

 

二、adapativeThreshold()函数

2.1 adapativeThreshold()函数各参数详解

void cvAdaptiveThreshold(constCvArr* 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, 它是一个从均值或加权均值提取的常数(见讨论), 尽管它可以是负数。

 

2.2调用示例 

Mat ScrImage, OutImage, OutImage1, OutImage2, OutImage3;

ScrImage = imread("E:\\1TJQ\\Opencv\\Images\\image1.jpg");

adaptiveThreshold(ScrImage, OutImage2, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 31, 10);//自适应阈值分割

imshow("【自动阈值处理:二值化】", OutImage2);

 

三、完整程序

#include <opencv2/core/core.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/opencv.hpp>

 

#include <vector>

#include <cstdio>

 

using namespacestd;

using namespacecv;

 

int main()

{

   Mat ScrImage, ScrImgaeCopy1, OutImage, OutImage1, OutImage2,OutImage3, OutImage4, OutImage5, OutImage6, OutImage7, OutImage8, OutImage9;

   ScrImage = imread("E:\\1TJQ\\Opencv\\Images\\image1.jpg",0); //读入图像 \\image1.jpg brownbug.jpg whitebug.jpg

   imshow("【原图】", ScrImage);

 

   threshold(ScrImage,OutImage1, 200, 255, CV_THRESH_BINARY);//固定阈值分割

   adaptiveThreshold(ScrImage,OutImage2, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 31, 10);//自适应阈值分割

 

   imshow("【固定阈值处理:二值化】", OutImage1);

   imshow("【自动阈值处理:二值化】", OutImage2);

 

   waitKey(0);

   return NULL;

}

 

参考内容:

http://www.cnblogs.com/mq0036/p/5902104.html

原创粉丝点击