2012-11-09 73 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