2013-02-28 130 views
1

如何知道從'查找輪廓'功能獲取的輪廓是否在opencv中打開或關閉?我如何知道opencv中的輪廓是打開還是關閉?

UPDATE

我試圖isContourConvex適用於這一形象:以最大的面積 https://docs.google.com/file/d/0ByS6Z5WRz-h2RXdzVGtXUTlPSGc/edit?usp=sharing

我extractes輪廓並返回false。 我改變了,也許輪廓提取,擴張?

nomeimg = 'Riscalate2/JPEG/e (5).jpg' 

img = cv2.imread(nomeimg) 

gray = cv2.imread(nomeimg,0)#convert grayscale adn binarize 

element = cv2.getStructuringElement(cv2.MORPH_CROSS,(6,6)) 
graydilate = cv2.erode(gray, element) #imgbnbin 

cv2.imshow('image',graydilate) 
cv2.waitKey(0) 

ret,thresh = cv2.threshold(graydilate,127,255,cv2.THRESH_BINARY_INV) # binarize 

imgbnbin = thresh 
cv2.imshow('bn',thresh) 
cv2.waitKey() 

#element = cv2.getStructuringElement(cv2.MORPH_CROSS,(2,2)) 
#element = np.ones((11,11),'uint8') 


contours, hierarchy = cv2.findContours(imgbnbin, cv2.RETR_TREE ,cv2.CHAIN_APPROX_SIMPLE) 
print(len(contours)) 


# Take only biggest contour basing on area 
Areacontours = list() 
calcarea = 0.0 
unicocnt = 0.0 
for i in range (0, len(contours)): 
    area = cv2.contourArea(contours[i]) 
    #print("area") 
    #print(area) 
    if (area > 90): #con 90 trova i segni e togli puntini 
     if (calcarea<area): 
      calcarea = area 
      unicocnt = contours[i] 


convex = cv2.isContourConvex(unicocnt) 
print("convex") 
print(convex) 
+0

我覺得cvcontour是基於連接的部件因此它們不能打開。 – William 2013-02-28 12:33:44

+1

所以我永遠不知道在我的圖像中,我有一個像「O」或「C」的圓圈?也許是基於別的東西? – postgres 2013-02-28 12:40:28

回答

4

您正在尋找的條款concave(如C)VS convex(像O)的輪廓。

你猜怎麼着,有檢查凸的方法:

cv2.isContourConvex(contour)

+1

如果輪廓是C的形狀,但增厚版本會怎麼樣?它不會工作,對吧?或加厚的Y? – 2013-02-28 12:56:48

+1

@AbidRahmanK:什麼都行不通?這些都是凹面輪廓。對於加粗的字母O,你會得到2個獨立的輪廓,都是凸形的。 – Junuxx 2013-02-28 13:01:52

+0

是的,我認爲你是對的。我只是混淆了凹凸,抱歉.... :) – 2013-02-28 13:09:42