首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV轮廓演化

OpenCV轮廓演化
EN

Stack Overflow用户
提问于 2016-02-07 23:10:03
回答 1查看 725关注 0票数 0

我有一个轮廓,我想要“捕捉”到图像的边缘。也就是说,像智能剪刀这样的东西,但同时适用于整个轮廓。用户提供了对象轮廓的粗略草图,我想通过将轮廓上的每个点“推”到边缘图像中最近的点来清理它。

在OpenCV中有这样的东西吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-08 02:16:32

您可以按照建议使用cv::grabCut模拟活动轮廓。您可以选择吸引半径(曲线可以从原始位置演变到多远),并通过使用膨胀和侵蚀的图像来定义轮廓周围的未知区域。

代码语言:javascript
复制
// cv::Mat img, mask; // contour on mask as filled polygon
if ( mask.size()!=img.size() )
    CV_Error(CV_StsError,"ERROR");
int R = 32; // radius of attraction
cv::Mat strel = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(2*R+1,2*R+1) );
cv::Mat gc( mask.size(), CV_8UC1, cv::Scalar(cv::GC_BGD) );
cv::Mat t;
cv::dilate( mask, t, strel );
gc.setTo( cv::GC_PR_BGD, t );
gc.setTo( cv::GC_PR_FGD, mask ); // 3
cv::erode( mask, t, strel );
gc.setTo( cv::GC_FGD, t ); // 1
cv::grabCut( img, gc, cv::Rect(), cv::Mat(), cv::Mat(), 2 );
gc &= 0x1; // either foreground or probably foreground
gc *= 255; // so that you see it

你可能失去的是轮廓的拓扑结构。这里需要一些处理。此外,您无法控制轮廓的曲率或平滑度,这并不是真正意义上的轮廓演化。

如果您感兴趣,ITK测地活动等高线可能就是您正在寻找的http://www.itk.org/Doxygen/html/classitk_1_1GeodesicActiveContourLevelSetImageFilter.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35255145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档