0

我正在findContours使用Mat. 轮廓被很好地提取,但它们的坐标不是全局的,它们属于 ROI。因此,当我想将它们绘制成图像时,它们都被绘制在定义我的 ROI 的矩形中。我想我只是错过了一些基本的东西。有人有想法吗?

这是代码片段。

Mat roi(img_grad, inflated_rect);
findContours( roi, canidates, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
for(int i = 0; i < canidates.size(); ++i) {
   drawContours(mat, canidates, i, Scalar(0,0,255), 1, CV_AA, hierarchy, 1, Point(0,0));
}
4

1 回答 1

3

findContours返回相对于您的 ROI 的坐标。

因此,您应该将所有点移动 ROI 偏移量(注意最后一个参数):

for(int i = 0; i < canidates.size(); ++i) {
    drawContours(mat, canidates, i, Scalar(0,0,255), 1, CV_AA, hierarchy, 1, inflated_rect.tl());
}

或获得另一个 ROI 进行绘图:

for(int i = 0; i < canidates.size(); ++i) {
    Mat roi2(mat, inflated_rect);
    drawContours(roi2, canidates, i, Scalar(0,0,255), 1, CV_AA, hierarchy, 1, Point(0,0));
}
于 2012-11-09T10:50:42.117 回答