首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等高线区域查找

等高线区域查找
EN

Stack Overflow用户
提问于 2019-03-16 18:12:05
回答 1查看 1.5K关注 0票数 0

我正在开发一个缺陷分析系统,在这个系统中可以找到缺陷水果的区域。我正处于它发展的初始阶段。我使用的是opencv和python。

我使用了以下代码来查找轮廓:

代码语言:javascript
复制
im = cv2.imread('Mango_49_A.jpg')
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(im, contours, -1, (0,255,0), 3)

为了找到区域,我使用以下代码:

代码语言:javascript
复制
if len(contours) != 0:
    for (i, c) in enumerate(contours):
        area = cv2.contourArea(c)
        if area < area_of_the_mango1:
            print(area)
            area_of_the_defected_region1 += area
            cv2.drawContours(img, c, -1, (255,255,0), 12)

结果是:

我只想计算芒果内部的轮廓。我得到的结果计算了如下的轮廓面积: 1.完整的图像边界2.芒果3.芒果的缺陷

由于它计算了上述三个区域的面积,因此缺陷区域的面积大于芒果的面积。

帮我计算一下芒果内部的轮廓面积。

EN

回答 1

Stack Overflow用户

发布于 2019-03-17 00:35:41

事实上,你得到的外部边界和一些微小的轮廓作为背景的一部分,这表明阈值不是分离前景和背景的理想方法。

对于此行:

代码语言:javascript
复制
ret, thresh = cv2.threshold(imgray, 127, 255, 0)

使用值127,以便您不再看到前景对象和背景的外边缘之间的轮廓

此外,您可以使用morphological filters (例如,腐蚀)来清除一些阈值

当前如何检索轮廓的主要问题是:cv2.RETR_TREE。根据findContours documentation,您只能检索外部轮廓,这就是您想要的:

代码语言:javascript
复制
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

下一步,你可以看看更多的Contour Features,比如你已经在使用的contourArea,还有轮廓近似和凸包。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55195602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档