2012-11-09 46 views
0

我在使用过载运算符Mat的以前设置的ROI中使用函数findContours。轮廓被提取得很好,但它们的坐标不是全局的,它们是属于ROI的。所以,当我想将它们绘制成图像时,它们都会绘制在定义我的ROI的Rectangle中。我想我只是错过了一些基本的东西。任何人有想法?在ROI中使用findContours,坐标轮廓错误

这是代码片段。

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

回答

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

或获得其他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)); 
} 
+0

谢谢,我想要做什么。只是有点惊讶,因为我认为如果您设置ROI,OpenCV会自动为您进行所有坐标转换。但是,“抵消”似乎是合法的。再次感谢! – moatilliatta