如何根据垂直投影图和水平投影图进行分割啊

稻草人3324 2016-11-30 05:13:52
#include <cv.h>
#include <highgui.h>
int main()
{
IplImage *src=cvLoadImage("img//car1//wnd[5].jpg",1);
CvSize sz;
sz.width=src->width;
sz.height=src->height;
//IplImage *img_gray=cvCreateImage(sz,IPL_DEPTH_8U,1);
//cvCvtColor(src,src,CV_BGR2GRAY);
// cvSmooth(src,src,CV_BLUR,3,3,0,0);
cvThreshold(src,src,100,255,CV_THRESH_BINARY_INV);
IplImage* paintx=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
IplImage* painty=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
cvZero(paintx);
cvZero(painty);
int* v=new int[src->width];
int* h=new int[src->height];
memset(v,0,src->width*4);
memset(h,0,src->height*4);

int x,y;
CvScalar s,t;
for(x=0;x<src->width;x++)
{
for(y=0;y<src->height;y++)
{
s=cvGet2D(src,y,x);
if(s.val[0]==0)
v[x]++;
}
}

for(x=0;x<src->width;x++)
{
for(y=0;y<v[x];y++)
{
t.val[0]=255;

cvSet2D(paintx,y,x,t);
}

}

/*****************************水平投影***********************************************/
for(y=0;y<src->height;y++)
{
for(x=0;x<src->width;x++)
{
s=cvGet2D(src,y,x);
if(s.val[0]==0)
h[y]++;
}
}
for(y=0;y<src->height;y++)
{
for(x=0;x<h[y];x++)
{
t.val[0]=255;

cvSet2D(painty,y,x,t);
}
}
//cvLine(src,cvPoint(77,0),cvPoint(77,29), CV_RGB(255,0,0), 2, CV_AA, 0 );
cvNamedWindow("二值圖像",1);
cvNamedWindow("垂直積分投影",1);
cvNamedWindow("水準積分投影",1);
cvShowImage("二值圖像",src);
cvShowImage("垂直積分投影",paintx);
cvShowImage("水準積分投影",painty);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&src);
cvReleaseImage(&paintx);
cvReleaseImage(&painty);
return 0;
}
...全文
942 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧