2011-11-01 19 views
1

我無法使用OpenCV(2.3)在ubuntu上成功計算距離轉換。輸出或者是黑色的,或者是原始圖像的副本,但不會像預期的那樣具有漸變的灰度圖像。OpenCV distanceTransform返回意想不到的結果(空的Mat或原始圖像)

我的代碼:

Mat input(Size(100,100), CV_8UC1); 
circle(input, Point(50,50), 10 Scalar(255,255,255), 15, 0, 0)); 

Mat output(Size(100,100), CV_32FC1); 
distanceTransformation(input, output, CV_DIST_L2, CV_DIST_MASK_3); //Output is completely black 
//distanceTransformation(input, output, CV_DIST_L2, CV_DIST_MASK_PRECISE); //Output is a "copy" of input 


imshow("in", input); 
imshow("out", output); 

有什麼建議?

回答

1

第一個調用是正確的,但作爲一個距離,它不存儲爲uchar。當你想要顯示它時,OpenCV將這些浮點數(我認爲)轉換爲uchars。結果似乎是黑色的。

查找輸出的最大值,然後縮放以適應灰度圖像

double maxVal = findMaxDistanceSomehow(); 

output.convertTo(displayBuffer, CV_8UC1, 255./maxVal,0); 

imshow("dist", displayBuffer); 

編輯

第一個想法是正確的,但實際上你並沒有試圖找到MAXVAL !你說通過看圖片,而不是實際提取它。勝利和失敗的區別。

因此,計算使用精確 algoritm的DIST變換,然後

output.convertTo(displayBuffer, CV_8UC1, 10 ,0); 

編輯2

必須把setTo(0)。

+0

輸出矩陣的最大值爲零 - 但我不知道爲什麼... – Dennis

+0

奇怪...是你的輸入圖像黑色的白色圓圈?爲什麼不在畫圓之前將其設置爲零? input.setTo(0); – Sam

+0

是的,我的輸入圖像是黑色的,有一個白色圓圈(中間有一個非常小的黑洞)。 setTo(0)不會更改任何內容(令人遺憾)... – Dennis

相關問題