2013-02-28 86 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