首页 > 试题

阀值和阈值的区别

更新时间:2022-12-07 18:46:47 阅读: 评论:0

国内最好的高压焊工培训学校-墨西哥湾暖流


2022年12月7日发(作者:梁山伯与朱丽叶歌词)

【OpenCV图像处理⼊门学习教程⼆】不同阈值⼆值化图像

OpenCV图像处理⼊门学习教程系列,上⼀篇第⼀篇:

图像⼆值化介绍

图像⼆值化是图像预处理中⾮常重要的⼀部分。图像⼆值化简单来说就是将256个亮度等级的灰度图像通过适当的阈值选取⽽获得仍然可以

反映图像整体和局部特征的⼆值化图像。

在数字图像处理中,⼆值图像占有⾮常重要的地位,⾸先,图像的⼆值化有利于图像的进⼀步处理,使图像变得简单,⽽且数据量减⼩,能

凸显出感兴趣的⽬标的轮廓。其次,要进⾏⼆值图像的处理与分析,⾸先要把灰度图像⼆值化,得到⼆值化图像。

⼀、OpenCV中的图像⼆值化

在OpenCV中,图像⼆值化最关键的⼀个函数就是——cvThreshold()

下⾯简单地介绍⼀下这个函数,有关该函数的具体定义与说明,可以在OpenCV的imgproctypes_c.h中找到。

该函数的主要功能就是,采⽤Canny⽅法对图像进⾏边缘检测

函数原型及说明如下:

voidcvThreshold(//函数说明:

constCvArr*src,//第⼀个参数表⽰输⼊图像,必须为单通道灰度图。

CvArr*dst,//第⼆个参数表⽰输出的边缘图像,为单通道⿊⽩图。

doublethreshold,//第三个参数表⽰阈值

doublemax_value,//第四个参数表⽰最⼤值。

intthreshold_type//第五个参数表⽰运算⽅法。

);

上述的第五个参数也就是Thresholdtypes如下:

/*Thresholdtypes↓*/

enum

{CV_THRESH_BINARY=0,/*value=value>threshold?max_value:0*/

CV_THRESH_BINARY_INV=1,/*value=value>threshold?0:max_value*/

CV_THRESH_TRUNC=2,/*value=value>threshold?threshold:value*/

CV_THRESH_TOZERO=3,/*value=value>threshold?value:0*/

CV_THRESH_TOZERO_INV=4,/*value=value>threshold?0:value*/

CV_THRESH_MASK=7,

CV_THRESH_OTSU=8/*uOtsualgorithmtochootheoptimalthresholdvalue;combinetheflagwithoneoftheaboveCV_THRESH_*values*/

//最后⼀个是⾃适应算法取阈值(最⼤类间⽅差法),这样前⾯的第四个参数threshold会⽆效

};

⼆、基于OpenCV3.3的图像⼆值化(阈值可调)

下⾯是⼀段基于OpenCV3.3的图像⼆值化实例代码,阈值可以通过滑动条来调节,可以观察不同阈值:

IDEIDE:VisualStudio2013

语⾔语⾔:C++

依赖依赖:OpenCV3.3.0

整个⼯程⽂件见

#include<>

usingnamespacestd;

IplImage*g_pGrayImage=NULL;

IplImage*g_pBinaryImage=NULL;

constchar*pstrWindowsBinaryTitle="⼆值化之后的图像";

voidon_trackbar(intval)

{

//转为⼆值图

cvThreshold(g_pGrayImage,g_pBinaryImage,val,255,CV_THRESH_BINARY);

//显⽰⼆值图

cvShowImage(pstrWindowsBinaryTitle,g_pBinaryImage);

}

intmain(intargc,char**argv)

{

constchar*pstrWindowsSrcTitle="原图-byLenna";

constchar*pstrWindowsToolBarName="⼆值化阈值";

//从⽂件中加载原图

IplImage*pSrcImage=cvLoadImage("",CV_LOAD_IMAGE_UNCHANGED);

//转为灰度图Gray=R*0.299+G*0.587+B*0.114(通道顺序B->G->R)

g_pGrayImage=cvCreateImage(cvGetSize(pSrcImage),IPL_DEPTH_8U,1);

cvCvtColor(pSrcImage,g_pGrayImage,CV_BGR2GRAY);

//创建⼆值图

g_pBinaryImage=cvCreateImage(cvGetSize(g_pGrayImage),IPL_DEPTH_8U,1);

//显⽰原图

cvNamedWindow(pstrWindowsSrcTitle,CV_WINDOW_AUTOSIZE);

cvShowImage(pstrWindowsSrcTitle,pSrcImage);

//创建⼆值图窗⼝

cvNamedWindow(pstrWindowsBinaryTitle,CV_WINDOW_AUTOSIZE);

//滑动条

intnThreshold=63;

cvCreateTrackbar(pstrWindowsToolBarName,pstrWindowsBinaryTitle,&nThreshold,254,on_trackbar);

on_trackbar(63);//初始阈值的设置,初步调试设为63

cvWaitKey(0);

cvDestroyWindow(pstrWindowsSrcTitle);

cvDestroyWindow(pstrWindowsBinaryTitle);

cvReleaImage(&pSrcImage);

cvReleaImage(&g_pGrayImage);

cvReleaImage(&g_pBinaryImage);

return0;

}

运⾏结果如下:

⼤家可以再拉⼀拉滑动条,看看不同的阈值⼆值化出来的图⽚怎么样~上图的值私以为是看起来⽐较舒服的~

当然除了cvThreshold()这个函数以外,OpenCV中还提供了cvAdaptiveThreshold()函数以及cvCanny()函数也是可以对图像进⾏⼆值化

的,⽽cvAdaptiveThreshold()函数会使⽤Otsu算法(⼤律法或最⼤类间⽅差法)来进⾏⾃适应全局阈值,通过这个阈值对图像进⾏⼆值化,

效果是和在调⽤cvThreshold()时传⼊参数CV_THRESH_OTSU是⼀样的,⼤家可以⾃⼰试⼀试~

基于OpenCV3.3的图像⼆值化(阈值可调),整个⼯程⽂件见

OpenCV图像处理⼊门学习教程系列,下⼀篇第三篇:

本文发布于:2022-12-07 18:46:47,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/61241.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:91s
下一篇:视星等
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图