首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >图像中的像素排序

图像中的像素排序
EN

Stack Overflow用户
提问于 2014-05-27 08:35:26
回答 2查看 680关注 0票数 1

我有需要检测形状的图片。为了做到这一点,我使用模板,我从其中炮击点,然后尝试将这些点与我的形象,以最佳匹配。当我找到最佳匹配时,我需要在这个点周围画出曲线。

问题是拿的点不整齐。(你可以在图片上看到)。如何排序点的曲线将不会“跳跃”,但平稳。

我试过用stable_sort(),但没有成功。

代码语言:javascript
运行
复制
stable_sort(points.begin(), points.end(), Ordering_Functor_y());
stable_sort(points.begin(), points.end(), Ordering_Functor_x());

使用stable_sort()

对于绘图,我使用了以下函数:

代码语言:javascript
运行
复制
polylines(result_image, &pts, &npts, 1, true, Scalar(0, 255, 0), 3, CV_AA);

知道怎么解决这个问题吗?谢谢。

编辑:这里是从模板中获取点的代码

代码语言:javascript
运行
复制
for (int model_row = 0; (model_row < model.rows); model_row++)
{
    uchar *curr_point = model.ptr<uchar>(model_row);
    for (int model_column = 0; (model_column < model.cols); model_column++)
    {
        if (*curr_point > 0)
        {
            Point& new_point = Point(model_column, model_row);
            model_points.push_back(new_point);
        }
        curr_point += image_channels;
    }
}

在代码的这一部分中,您可以看到点顺序的问题在哪里。有没有更好的选择,如何保存点的正确顺序,我不会有问题绘制轮廓?

EN

回答 2

Stack Overflow用户

发布于 2014-05-27 08:46:40

您目前的方法是对x或y值进行排序,这不是绘制轮廓的适当顺序。

有一种方法可以做到以下几点

  1. 计算被检测对象的质量中心
  2. 将极坐标系统放置在质量中心
  3. 计算各点的方向
  4. 按方向坐标对点排序

它会比你目前的排序更好,但可能不是完美的。

一种更复杂的方法是确定通过所有检测点的最短路径。如果点均匀地分布在等高线周围,这种方法将定位轮廓。这种方法的搜索条件是旅行推销员问题。

票数 0
EN

Stack Overflow用户

发布于 2014-05-27 15:33:04

我想你在寻找凹赫尔算法。见此处:http://ubicomp.algoritmi.uminho.pt/local/concavehull.html

Java实现:这里

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

https://stackoverflow.com/questions/23884668

复制
相关文章

相似问题

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