如何找到图像中对象的边界?

时间:2019-05-24 04:23:23

标签: c# opencv image-processing

我想绘制轮廓以裁剪图像中的对象,但是输入的分辨率较低且图像不清楚。

我尝试在opencv中使用绘制轮廓,但效果不佳,它像我下面发布的图像一样是板组

Gray image and draw contour by opencv

我想绘制轮廓并像这样裁剪图像

bounding ROI

还有一件事,您是否有任何想法可以计算图像中的印版?

1 个答案:

答案 0 :(得分:0)

基于图像。显示绿色后, 运行opencv分区。将距离设置得足够大,以使其远离左噪声。这是来自@Miki's answer的示例:

int th_distance = 18; // radius tolerance

int th2 = th_distance * th_distance; // squared radius tolerance
vector<int> labels;

int n_labels = partition(pts, labels, [th2](const Point& lhs, const Point& rhs) {
    return ((lhs.x - rhs.x)*(lhs.x - rhs.x) + (lhs.y - rhs.y)*(lhs.y - rhs.y)) < th2; 
});

enter image description here enter image description here 然后对于分区中的每个标签,使用凸包或简单地将max放置到边界框中,以找到水平Rect(如果您要这样做)

enter image description here

通过查看凸包或水平Rect的主方向的中心有多少个交叉,计数会更容易