想问下怎样提取一个图像的边界

TZL726844704 2013-01-05 09:58:21
给出一副真彩图,有什么好的算法提取边界
...全文
280 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
尘中远 2013-01-13
  • 打赏
  • 举报
回复
opencv里面什么都有
schlafenhamster 2013-01-13
  • 打赏
  • 举报
回复
"梯度矢量流蛇型条(GVF)"
MoreWindows 2013-01-13
  • 打赏
  • 举报
回复
楼主可以参考下我写的 《【OpenCV入门指南】第五篇 轮廓检测 上》 http://blog.csdn.net/morewindows/article/details/8253137 和 《【OpenCV入门指南】第六篇 轮廓检测 下》 http://blog.csdn.net/morewindows/article/details/8253174 OpenCV的安装可以参考《【OpenCV入门指南】第一篇 安装OpenCV》 http://blog.csdn.net/morewindows/article/details/8225783
zhuyuge0 2013-01-13
  • 打赏
  • 举报
回复
或者对图像求导下就ok了
zhuyuge0 2013-01-13
  • 打赏
  • 举报
回复
用canny算子吧
zhoujk 2013-01-13
  • 打赏
  • 举报
回复
灰度图提取边界: 1.源图fA(,)进行图像收缩,就是取8邻域中的最小值为当前值,得fB(,); 2.fC(,) = fA(,) - fB(,); 在三个通道中都做这个运算,然后对每个点取三个通道中的最大值。
nabasasun 2013-01-12
  • 打赏
  • 举报
回复
这不是传说中的魔术棒工具的攻能么
jimette 2013-01-12
  • 打赏
  • 举报
回复
ls ding
zhaoleinefu 2013-01-12
  • 打赏
  • 举报
回复
用轮廓跟踪函数void TrackSearch(BYTE* image0, BYTE* image1, int w, int h) { BYTE* flag=new BYTE[w*h]; //标志,1代表该点已填充 BYTE** flagBuf=CreatImage(flag,w,h,1); //将标志转换成二维数组 int* track; //链码表 int x,y,i,index; //初始化填充标志 memset(flag,0,w*h); //初始化轮廓图 memset(image1,0,w*h*4); BYTE** imageBuf0=CreatImage(image0,w,h,4); //将像素转换成二维数组 BYTE** imageBuf1=CreatImage(image1,w,h,4); //将像素转换成二维数组 //指定区域颜色 BYTE* color=new BYTE[3]; color[0]=0; color[1]=0; color[2]=0; //指定填充颜色 BYTE* fillColor=new BYTE[3]; fillColor[0]=255; fillColor[1]=255; fillColor[2]=255; i=0; while(i<w*h*4 ) { //搜索起始点 if( IsSameColor(&image0[i],color,50) ) { y = i/4/w; x = i/4%w; index = x>0 ? 0:6; //确定起始方向链码 track = SingleTrack(imageBuf0,w,h,x,y,index,color); //单区域轮廓跟踪 FillArea(image0,w,h,track,fillColor,50); //区域填充 DrawTrack(imageBuf1,track); //区域绘制 } i+=4; } }

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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