博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【学习opencv第七篇】图像的阈值化
阅读量:6326 次
发布时间:2019-06-22

本文共 2494 字,大约阅读时间需要 8 分钟。

图像阈值化的基本思想是,给定一个数组和一个阈值,然后根据数组中每个元素是低于还是高于阈值而进行一些处理。

cvThreshold()函数如下:

 

double cvThreshold(	CvArr* src,  	CvArr* dst,	double threshold,     	double max_value,    	int threshold_type	)

cvShold函数只能处理8位或者浮点灰度图像,目标图像必须与源图像一致,或者为8为图像

 

实现阈值化的代码如下:

 

#include "stdafx.h"#include 
#include
#include
using namespace std;int main(){ IplImage* sourceImage; IplImage* dstImage; if(!(sourceImage=cvLoadImage("Hough.jpg"))) return -1; dstImage=cvCreateImage(cvGetSize(sourceImage),sourceImage->depth,1); IplImage* r=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1); IplImage* g=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1); IplImage* b=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1); IplImage* tempImage=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1); cvSplit(sourceImage,r,g,b,NULL); cvAddWeighted(r,1./3.,g,1./3.,0.0,tempImage); cvAddWeighted(tempImage,1,b,1./3.,0.0,tempImage); cvThreshold(tempImage,dstImage,100,255,CV_THRESH_BINARY); //对于大于100的设为255 cvNamedWindow("sourceImage"); cvNamedWindow("dstImage"); cvShowImage("sourceImage",sourceImage); cvShowImage("dstImage",dstImage); cvWaitKey(-1); cvReleaseImage(&r); cvReleaseImage(&g); cvReleaseImage(&b); cvDestroyWindow("sourceImage"); cvDestroyWindow("dstImage"); cvReleaseImage(&sourceImage); cvReleaseImage(&dstImage); return 0;}

运行结果:

 

在自适应阈值中,阈值本身就是一个变量,实现自适应阈值的代码如下:

 

#include "stdafx.h"#include 
#include
#include
int main(){ IplImage* sourceImage; //直接以灰度图像载入 if(!(sourceImage=cvLoadImage("Hough.jpg",CV_LOAD_IMAGE_GRAYSCALE))) return -1; IplImage* dstImage=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1); //这个函数只能处理单通道图像或者8位图像,并且要求源图像 与目标图像不能为同一个图像 cvAdaptiveThreshold( sourceImage, dstImage, 255, //max_val CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, //block_size 5 //offset ); cvNamedWindow("AdaptiveThreshold",0); cvShowImage("AdaptiveThreshold",dstImage); //单一阈值 IplImage* dstImage2=cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U,1); cvThreshold(sourceImage,dstImage2,100,255,CV_THRESH_BINARY); cvNamedWindow("sourceImage",0); cvNamedWindow("Threshold",0); cvShowImage("sourceImage",sourceImage); cvShowImage("Threshold",dstImage2); cvWaitKey(-1); //释放资源 cvDestroyWindow("sourceImage"); cvDestroyWindow("Threshold"); cvDestroyWindow("AdaptiveThreshold"); cvReleaseImage(&sourceImage); cvReleaseImage(&dstImage); cvReleaseImage(&dstImage2); return 0;}

运行结果:

 

Reference《学习opencv》

 

你可能感兴趣的文章
[原创]谷歌插件 - YE启动助手(YeLauncher)
查看>>
【web charting】21个Javascript图表插件程序
查看>>
div没有设置高度时背景颜色不显示(浮动)
查看>>
NYOJ39水仙花数
查看>>
20165318 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
查看>>
猴年大吉!
查看>>
linux install JDK
查看>>
OpenGL+VS2010环境配置及遇到的问题
查看>>
JavaScript设计模式 观察者模式
查看>>
[数据结构】【c语言】链表的创建和遍历
查看>>
std::string 字符串切割
查看>>
LeetCode 17. Letter Combinations of a Phone Number
查看>>
HDU1287 破译密码
查看>>
同时重写getter、setter方法,Use of undeclared identifier错误
查看>>
【原】iOS学习之文件管理器(NSFileManager)和文件对接器(NSFileHandle)
查看>>
【转】iOS学习之Storyboard中的UIScrollView使用自动布局
查看>>
yii2 邮件插件设置全局报警日志
查看>>
我的博客
查看>>
在 Web 页面中使用离线地图
查看>>
搭建 Docker-Registry 私有仓库
查看>>