当前位置: 首页 > 面试题库 >

在openCV中有什么内置函数可以做骨架化吗?

商宝
2023-03-14
问题内容

我发现在C / C ++中有一些实现,例如voronoi framework。通常这些代码需要密集的循环,这在python中是不好的。有没有可以在python中调用的内置骨架函数


问题答案:

OpenCV没有 框架
功能,但是您可以自己创建功能。从这里:

骨架/ MAT可以通过两种主要方式生成。

第一种方法是使用某种形态学细化方法,该方法会连续地从边界侵蚀像素(同时保留线段的端点),直到不再可能细化为止,此时剩下的近似骨骼。

另一种方法是首先计算
图像的距离变换。然后,骨骼沿着距离变换中的奇点(即折痕或曲率不连续点)放置。后一种方法更适合于计算MAT,因为MAT与距离变换相同,但骨架上的所有点均被抑制为零。

在这里,您可以找到一个使用形态运算的示例:

import cv2
import numpy as np

img = cv2.imread('sofsk.png',0)
size = np.size(img)
skel = np.zeros(img.shape,np.uint8)

ret,img = cv2.threshold(img,127,255,0)
element = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
done = False

while( not done):
    eroded = cv2.erode(img,element)
    temp = cv2.dilate(eroded,element)
    temp = cv2.subtract(img,temp)
    skel = cv2.bitwise_or(skel,temp)
    img = eroded.copy()

    zeros = size - cv2.countNonZero(img)
    if zeros==size:
        done = True

cv2.imshow("skel",skel)
cv2.waitKey(0)
cv2.destroyAllWindows()


 类似资料:
  • 问题内容: 据我所知,一个唯一可以做的事和一个不能做的事就是打电话给。 由于我们尚未调用,因此in 会在进入第一遍之前准备状态对象。本质上是相同的: 但是我看到了另一个有用的用例(在服务器端)。 让我们考虑一些异步的东西: 在这里,我们不能使用as分配来不会触发。 怎么样的?根据React docs : 在挂载发生之前立即调用。在之前调用),因此在此方法中设置状态不会触发重新渲染。避免在此方法中引

  • 问题内容: 首先,我想澄清一个问题:它是关于函数的, 而不是 列表的片段或类似的字符串。 文档提到该函数在NumPy中使用,并且没有给出用法示例(说了 如何使用它, 但没有说 何时使用它 )。而且,我 从未 见过在任何Python程序中使用过此函数。 在以纯Python(无NumPy或SciPy)编程时,何时应使用该函数?任何示例将不胜感激。 问题答案: 给出与相同的结果。一个的优点对象是,它可以

  • 问题内容: 我知道构造函数会创建一个新列表,但是它的特征到底是什么? 打电话时会怎样? 打电话时会怎样? 打电话时会怎样? 据我所知,调用构造函数会删除最外面的花括号(元组或列表),并将其替换为。这是真的?还有什么其他细微差别? 问题答案: 将传递给它的iterable转换为列表。如果itertable已经是一个列表,则返回 浅表副本 ,即仅最外层的容器是新的,其余对象仍然相同。

  • 问题内容: 编写Java程序时,对CPU如何利用其缓存存储数据有影响吗?例如,如果我有一个经常访问的数组,那么它是否足够小以适合一个高速缓存行(在64位计算机上通常为128字节)是否有帮助?如果我将一个经常使用的对象保持在该限制之内,我可以期望它的成员使用的内存紧密并留在缓存中吗? 背景:我正在构建一个压缩的数字树,它受C语言中Judy数组的启发很大。虽然我主要追求其节点压缩技术,但Judy将CP

  • 问题内容: 我开始学习Python,并且遇到过生成器函数,这些函数中包含yield语句。我想知道这些功能确实可以解决哪些类型的问题。 问题答案: 生成器为您提供懒惰的评估。您可以通过遍历它们来使用它们,可以显式地使用“ for”,也可以隐式地将其传递给任何迭代的函数或构造。您可以将生成器视为返回多个项目,就像它们返回一个列表一样,但是与其一次一次返回它们而不是一次全部返回它们,而是将生成器功能暂停

  • 问题内容: 在Python中,用于初始化不可变类型,通常用于初始化可变类型。如果将其从语言中删除,该怎么办(轻松)? 例如, 可以这样重写: 为澄清问题的范围:这不是一个问题关于如何以及是使用或它们之间有什么区别。这是一个问题,如果从语言中删除将会发生什么。有什么坏事吗?事情会变得很难或不可能吗? 问题答案: 您可以在中进行的所有操作都可以在中完成。 那么,为什么要使用? 因为您不必将实例存储在变