当前位置: 首页 > 知识库问答 >
问题:

在openCV findcontour中处理空层次结构

孙星鹏
2023-03-14

因此,这里的问题是,我不明白为什么python3版本的openCV的findOnTours()函数返回空层次结构,因此没有找到轮廓。

一点上下文:我从图像中提取形状,如果形状太大(例如,根据区域等特征),那么我提取这个形状并单独分析。这意味着我寻找可以在“大”形状中出现的进一步轮廓。

我需要确定这个事实:如果层次是空的,我可以在我正在处理的“大”图像中没有轮廓吗?

一段代码可以进一步澄清:

#bigSharpened is a binary image with little make-up
bigSharpened = cv.filter2D(bigOpened, -1, sharpkrnl)

###########################
#find and analyse contours#
###########################
h, w = sharpened.shape[:2]
_, bigContours0, bigHierarchy = cv.findContours(bigSharpened.copy(),cv.RETR_CCOMP, cv.CHAIN_APPROX_NONE)
bigContours = [cv.approxPolyDP(cnt, 3, True) for cnt in bigContours0]

print(len(bigHierarchy[0]))

运行代码时得到的错误消息(这使我认为bigHierarchy为空,因此没有找到轮廓)。

Traceback (most recent call last):
  File "filename.py", line 164, in <module>
    print(len(bigHierarchy[0]))
TypeError: 'NoneType' object is not subscriptable

如果我尝试打印bigContours0的长度,我会收到另一条错误消息:

Traceback (most recent call last):
  File "immunoistochemistry_quantification_analysis_with_GAPS.py", line 164, in <module>
    print(len(bigContours0[0]))
IndexError: list index out of range

共有2个答案

舒枫涟
2023-03-14

如上文评论所述,这是一个问题:

如果你给它一个完全黑色的图像,那么它肯定不会找到任何轮廓(复制起来非常简单,这是我尝试的第一件事,也是我问这些问题的原因)根据您的编辑,您没有执行len(bigContours0),而是执行len(bigContours0[0])——这是一个显著的差异。如果列表为空(长度为0),那么访问第一个元素将失败,这就是为什么会出现错误如果你不能上传它,那么至少保存它,自己详细检查一下。或者只是尝试制作一些安全的图像,并引起同样的问题。

图像为黑色,因此不包含任何轮廓。然后打印错误的元素(我对Python不熟练)返回了我遇到的错误。基本上就是这样。

宫俊远
2023-03-14

希望这能帮助一些人。个人简历如果图像是黑色图像,findContours方法不会找到任何轮廓。因此,请通过imshow、BIGSRIPED检查图像。在本例中是copy()

cv.imshow(图像,大harpened.copy)

 类似资料:
  • 我正在编写一个注释处理器来在编译时执行以下检查: 有一个接口 有一个注释<code>Apply<code>用于注释方法 用注释的方法应被称为,并且只取实现 到目前为止,我已经识别了所有名为< code>apply的带注释的方法,并提取了它们作为参数的类名。所以我只剩下: 问题是:如果有的话,我如何才能从中获得参数的类层次结构表示,以便检查它是否实现了。无法使用<code>类加载器。loadClas

  • 问题内容: 我刚刚用ViewController类创建了一个单视图应用程序项目。我想显示一个位于我自己的类中的函数的UIAlertController。 这是我的课程,带有警告。 这是执行警报的ViewController。 这是我得到的,而不是优美的警报。 警告:尝试在Sprint1.AlertController:0x797cc500上显示其视图不在窗口层次结构中的UIAlertControl

  • 我试图重现在Protege中显示给我的OWL本体(OWL.ttl)的类层次结构,您可以在标准URI位置http://www.w3.org/2002/07/OWL#下载。 我遇到的问题是,当我调用以获取层次结构根类时,返回的结果为零。因此我没有根类可以向下递归并构建层次结构。 ==============================================================

  • 我有这样的层次结构: 因此,用户可以添加他的工作经验。此外,他还可以为特定的项目添加角色。 我想为用户id 1获取项目,但项目之间只有关系 获取用户 获得工作经验 获取角色 获取项目 因此,如果我有更多不同工作经验的角色,我就必须提出20个请求才能得到我的项目。这不是很有效率吗?我必须加载一些不必要的数据。。。 是否可以只创建endpoint:并按用户ID过滤它? 应该如何在API上管理它?对我来

  • 零售商店的正确模式是什么?公司从商店销售产品。 这似乎违反了我对OOP所知的全部知识。通过层次结构向下传递数据的方法--在对象之间复制参数?我错过了什么?

  • 本规范定义了一个用于部署和打包用途的,可存在于开放文件系统、归档文件或一些其他形式中的层次结构。建议 servlet 容器支持这种结构作为运行时表示形式,但不是必须的.