我使用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));
}
答案 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));
}