2010-04-04 116 views
1

我正在檢測任何對象的形狀。我有一個二進制圖像,背景是白色的,前景/物體是黑色的。我需要檢測前景中黑色物體的形狀。圖像處理中的形狀檢測

我該怎麼辦?形狀可以是一個人/車/箱等,請幫助

+0

是否需要是規模/旋轉不變?這是一款遊戲嗎?還是必須考慮真實的照片? – 2010-04-04 12:39:27

+0

也許這個問題會得到更多的迴應,如果你告訴我們確定形狀的最終目標是什麼,因爲找到某物的形狀可能意味着許多不同的事物;形式遵循功能。 – amphetamachine 2010-04-04 13:26:50

回答

2

我不知道這是因爲amphetamachine說你的最終目標,但檢測的形狀可能是使用cvFindContours它給出一個很常見的方法一個二進制圖像並返回一組'CvContour'(實際上是一個cvSeq)。通過閾值化圖像(cvThreshold)可以非常簡單地檢索二值圖像。查看opencv src目錄的示例中的contours.c示例。檢查此鏈接,以及:

Noah (2009) opencv tutorial

此示例代碼會給你一個總體思路:

cvThreshold(g_gray, g_gray, g_thresh, 255, CV_THRESH_BINARY); 
cvFindContours(g_gray, g_storage, &contours); 
cvZero(g_gray); 
if(contours){ 
    cvDrawContours(
     g_gray, 
     contours, 
     cvScalarAll(255), 
     cvScalarAll(255), 
     100); 
} 
cvShowImage("Contours", g_gray); 

一旦你有輪廓的編碼就可以使用cvMatchShapes內搭2個輪廓並返回這些輪廓之間的相似度度量。

希望這種方法爲您提供了一個良好的開端!

2

對於準確的形狀檢測,您需要使用haar檢測或至少K個最近的鄰居。哈爾檢測可能非常準確,但需要很長時間才能建立。 K最近鄰居更容易建立,但並不準確。檢查出this youtube video。這傢伙正在使用KNN來檢測不同的手勢。請注意,比較圖像基本上是一個黑色的斑點。關於KNN的壞處是需要更多的資源來運行程序,但是使用haar檢測,當您使用haartraining.exe創建級聯xml文件時,已經完成了主要的處理。