在ROI中使用FindContours,将轮廓的坐标错误



我使用 Mat的过载运算符在previoulsy set ROI中使用函数 findContours。轮廓被提取得很好,但是它们的坐标不是全球性的,他们属于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));
}

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));
}

最新更新