Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何知道轮廓在opencv中是打开的还是关闭的?_Python_Opencv_Contour - Fatal编程技术网

Python 如何知道轮廓在opencv中是打开的还是关闭的?

Python 如何知道轮廓在opencv中是打开的还是关闭的?,python,opencv,contour,Python,Opencv,Contour,如何知道从“查找轮廓”函数中提取的轮廓在opencv中是打开的还是关闭的 更新 我尝试将isContourConvex应用于此图像: 提取面积最大的等高线 返回false。 我改变了,也许,轮廓提取,扩张 nomeimg = 'Riscalate2/JPEG/e (5).jpg' img = cv2.imread(nomeimg) gray = cv2.imread(nomeimg,0)#convert grayscale adn binarize element = cv2.getStr

如何知道从“查找轮廓”函数中提取的轮廓在opencv中是打开的还是关闭的

更新

我尝试将isContourConvex应用于此图像:

提取面积最大的等高线 返回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)
nomeimg='Riscalate2/JPEG/e(5.jpg'
img=cv2.imread(nomeimg)
gray=cv2.imread(nomeimg,0)#转换灰度和二值化
元素=cv2.getStructuringElement(cv2.MORPH_CROSS,(6,6))
灰色扩张=cv2.侵蚀(灰色,元素)#imgbnbin
cv2.imshow(“图像”,灰度放大)
cv2.等待键(0)
ret,thresh=cv2.阈值(灰度放大,127255,cv2.thresh_BINARY_INV)#二值化
imgbnbin=阈值
cv2.imshow('bn',阈值)
cv2.waitKey()
#元素=cv2.getStructuringElement(cv2.MORPH_CROSS,(2,2))
#元素=np.ones((11,11),‘uint8’)
轮廓,层次=cv2.findContours(imgbnbin,cv2.RETR_树,cv2.CHAIN_近似_简单)
打印(透镜(轮廓))
#根据面积只取最大轮廓
Area等高线=列表()
钙质=0.0
单碳纳米管=0.0
对于范围(0,len(等高线))内的i:
面积=cv2。轮廓面积(轮廓[i])
#打印(“区域”)
#打印(面积)
如果(面积>90):#控制90 trova i segni e togli puntini

如果(calcrea您正在寻找术语(如a C)与(如a O)等高线

猜猜看,有一种方法可以检查凸性:


我认为cvcontour是基于连接的组件,因此它们不能打开。所以我永远不知道在我的图像中是否有一个像“O”或“C”这样的圆?也许是基于其他的东西?如果轮廓是C的形状,但加厚的版本呢?它不起作用,对吗?或者加厚的Y?阿比德拉赫曼克:什么不起作用?这些都是凹形轮廓。对于加厚的字母O,你会得到两个单独的轮廓,都是凸的。是的,我想你是对的。我只是把凹形和凸形混淆了,对不起……)