我有需要检测形状的图片。为了做到这一点,我使用模板,我从其中炮击点,然后尝试将这些点与我的形象,以最佳匹配。当我找到最佳匹配时,我需要在这个点周围画出曲线。
问题是拿的点不整齐。(你可以在图片上看到)。如何排序点的曲线将不会“跳跃”,但平稳。

我试过用stable_sort(),但没有成功。
stable_sort(points.begin(), points.end(), Ordering_Functor_y());
stable_sort(points.begin(), points.end(), Ordering_Functor_x());使用stable_sort()

对于绘图,我使用了以下函数:
polylines(result_image, &pts, &npts, 1, true, Scalar(0, 255, 0), 3, CV_AA);知道怎么解决这个问题吗?谢谢。
编辑:这里是从模板中获取点的代码
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;
}
}在代码的这一部分中,您可以看到点顺序的问题在哪里。有没有更好的选择,如何保存点的正确顺序,我不会有问题绘制轮廓?
发布于 2014-05-27 08:46:40
您目前的方法是对x或y值进行排序,这不是绘制轮廓的适当顺序。
有一种方法可以做到以下几点
它会比你目前的排序更好,但可能不是完美的。
一种更复杂的方法是确定通过所有检测点的最短路径。如果点均匀地分布在等高线周围,这种方法将定位轮廓。这种方法的搜索条件是旅行推销员问题。
发布于 2014-05-27 15:33:04
我想你在寻找凹赫尔算法。见此处:http://ubicomp.algoritmi.uminho.pt/local/concavehull.html
Java实现:这里
https://stackoverflow.com/questions/23884668
复制相似问题