《数字图像处理》学习笔记(八)--全局阈值分割
2014-01-13 20:31
381 查看
到今天已经学了将近一周的数字图像了,感觉路途非常遥远,要学的东西太多了,一直感觉自己挺笨的,没关系我还是很有热情。
因为以前从来没学过数字图像处理,我的帖子大部分都是很基础的东西,和那些小牛比起来真是自惭形秽啊。。。但我们想总有和我一样刚接触这个领域的同学,也许我写的东西对他们没有任何用处,可也许有用呢
说了一些废话开始吧。
全局阈值分割图像应该是图像分割里最简单的了,思想是来以直方图的波谷为阈值对图像进行对象和背景的分割,很简单的算法就不详细展开了
因为以前从来没学过数字图像处理,我的帖子大部分都是很基础的东西,和那些小牛比起来真是自惭形秽啊。。。但我们想总有和我一样刚接触这个领域的同学,也许我写的东西对他们没有任何用处,可也许有用呢
说了一些废话开始吧。
全局阈值分割图像应该是图像分割里最简单的了,思想是来以直方图的波谷为阈值对图像进行对象和背景的分割,很简单的算法就不详细展开了
#include "dipHeader.h" void threshold(IplImage* isrc, IplImage* idst) { IplImage* g1 = cvCreateImage(cvGetSize(isrc),8,1);//大于T IplImage* g2 = cvCreateImage(cvGetSize(isrc),8,1); double T,Temp, min,max; CvScalar mean1 ; CvScalar mean2 ; cvMinMaxLoc(isrc,&min,&max); T=0.5*(max+min); bool run = true; while(run) { //cvThreshold(src,g,(double)T,255,CV_THRESH_BINARY); cvZero(g1); cvZero(g2); for (int x=0; x<isrc->height;x++) { for (int y=0;y<isrc->width;y++) { if (isrc->imageData[x*isrc->widthStep+y]>T) { g1->imageData[x*g1->widthStep+y] = isrc->imageData[x*isrc->widthStep+y]; } else { g2->imageData[x*g2->widthStep+y] = isrc->imageData[x*isrc->widthStep+y]; } } } mean1=cvAvg(g1); mean2=cvAvg(g2); Temp = 0.5*(mean1.val[0]+mean2.val[0]); run = fabs(T-Temp)>0.5; T=Temp; } cvThreshold(isrc,idst,T,255,CV_THRESH_BINARY_INV); } void main() { IplImage* src = cvLoadImage("quanju.tif"); IplImage* g = cvCreateImage(cvGetSize(src),8,src->nChannels); cvNamedWindow("src",1); cvShowImage("src",src); //cvWaitKey(0); IplImage* temp1d = cvCreateImage(cvGetSize(src),8,1); IplImage* temp2d = cvCreateImage(cvGetSize(src),8,1); IplImage* temp3d = cvCreateImage(cvGetSize(src),8,1); IplImage* temp1 = cvCreateImage(cvGetSize(src),8,1); IplImage* temp2 = cvCreateImage(cvGetSize(src),8,1); IplImage* temp3 = cvCreateImage(cvGetSize(src),8,1); cvSplit(src,temp1,temp2,temp3,0); threshold(temp1,temp1d); threshold(temp2,temp2d); threshold(temp3,temp3d); cvMerge(temp1d,temp2d,temp3d,0,g); cvNamedWindow("g",1); cvShowImage("g",g); cvWaitKey(0); }
相关文章推荐
- 对Java开发的思考(代码组织、设计模式、开发流程)
- iOS 6会出现 UItextfield 无法输入任何字符的 bug
- 南邮-1181-lucky
- 在线支付
- python3自动下载优酷视频小程序
- zkClient的并发控制
- LaTeX命令速查
- 电脑进程
- 大并发 01 碎片
- SCN 查找
- C++编程参考
- MVC 弹出框、确认框
- 为BBB制作专属自己的cape(四)
- LINUX下动态链接库dlopen dlsym dlclose函数使用说明
- 向量的表示及协方差矩阵
- ssh首次远程登录不用输入yes|no
- JDBC连接MySQL
- php生成带logo的二维码
- SiteMesh 3.0版本的简单使用
- Eclipse中运行Hadoop程序的各种问题