- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图像分割(阈值分割和区域生长)vc代码
实验6 图像分割
阈值分割法
实验代码及结果:
#include cv.h
#include highgui.h
#include stdio.h
#include stdlib.h
#include math.h
int main( int argc, char** argv )
{
IplImage* pImg=0; //声明IplImage指针
int height,width,step,channels;
uchar *data;
int i,j;
//载入图像
pImg = cvLoadImage(2.jpg,0);
if( !pImg )
{
printf(Image was not loaded.\n);
return -1;
}
//获取图像信息
height=pImg-height;
width=pImg-width;
step=pImg-widthStep;
channels=pImg-nChannels;
data=(uchar *)pImg-imageData;
printf(Processing a %d*%d with %d channels\n,height,width,channels);
int MaxP=0;
float t,T,m=0,n=0;
float w0,w1,u0,u1,u;
double q2=0,temp=0;
cvNamedWindow( win1, 1);//创建窗口
cvShowImage( win1, pImg );//显示图像
//计算最大灰度值MaxP
for(i=0;iheight;i++)
for(j=0;jwidth;j++)
{
if(data[i*width+j]MaxP)
{MaxP=data[i*step+j];}
}
printf(最大灰度值:%d\n,MaxP);
//计算最大方差时的阈值t
for(T=0;TMaxP;T++)
{
w0=0,w1=0,u0=0,u1=0,u=0,q2=0,m=0,n=0;
for(i=0;iheight;i++)
{
for(j=0;jwidth;j++)
{
if(data[i*width+j]T)
{u0+=data[i*width+j];m++;}
else
{u1+=data[i*width+j];n++;}
}
}
w0=m/(width*height);
w1=1-w0;
u0/=m;
u1/=n;
u=w0*u0+w1*u1;
q2=w0*w1*pow(u0-u1,2);
if(q2temp)
{ t=T;temp=q2;}
}
printf(最佳阈值:%lf\n,t);
for(i=0;iheight;i++)
for(j=0;jwidth;j++)
{
if(data[i*width+j]t)
data[i*width+j]=0;
else
data[i*width+j]=255;
}
cvNamedWindow(win2, 1);
cvShowImage( win2, pImg );//显示图像
cvWaitKey(0);
cvDestroyWindow( win1 );//销毁窗口
cvDestroyWindow( win2 );
cvReleaseImage( pImg ); //释放图像
return 0;
}
区域生长法
实验代码及结果:
#include cv.h
#include highgui.h
#include stdio.h
#include stdlib.h
#include math.h
#includemalloc.h
#define MaxSize 1000000
struct queue{
int qu[MaxSize];
int front;
int rear;
int tag; //front==rear时表示队列满或空的标志:tag==1表示满,tag==0表示空
};
struct queue *InitQu()
{struct queue *q;
q=(struct queue *)malloc(sizeof(struct queue));//分配空间
q-front=0;
q-rea
文档评论(0)