我使用了Mat的重载操作符,在前面的集合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));
}发布于 2012-11-09 18:50:42
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());
}或者获取另一个用于绘图的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));
}https://stackoverflow.com/questions/13306341
复制相似问题