在ROI中使用findContours,轮廓坐标错误

时间:2012-11-09 10:31:09

标签: c++ image-processing opencv

我使用findContours的重载运算符在预先设置的ROI中使用函数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));
}

1 个答案:

答案 0 :(得分:3)

findContours返回与您的投资回报率相关的坐标。

所以你应该按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());
}

或获得另一个投资回报率:

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