【问题标题】:Python OpenCV Box2DPython OpenCV Box2D
【发布时间】:2012-07-31 12:30:18
【问题描述】:

我正在尝试从 python 中调用 OpenCV 函数 MinAreaRect2。 我将 OpenCV 2.4.2 与 python 2.7 和 numpy 1.6 一起使用。 我走了这么远:

import cv

def nda2ipl(arr, dtype=None):
    return cv.fromarray(np.ascontiguousarray(arr, dtype=dtype))

def min_area_rect2(points):
    storage = cv.CreateMemStorage()
    cv_points = nda2ipl(points.reshape((-1, 1, 2)))
    out = cv.MinAreaRect2(cv_points, storage)
return out

我可以使用形状为 (N x 2) 的 ndarray 调用此函数。我得到了这样的结果:

((476.5, 604.5), (951.0, 1207.0), -0.0)

我假设第一个元组是盒子的中心,第二个给出宽度和高度,最后一个是角度。

问题是我无法获得明确的参考来说明这一点。实际上,opencv 文档告诉我函数在 Python 中返回的内容。

我找到了official documentation about this function,但这不是很有帮助。

在 python 中 MinAreaRect2 的输出到底是什么? 更一般地说,您从哪里获得有关 OpenCV python 包装器的精确文档?

【问题讨论】:

    标签: python image-processing opencv


    【解决方案1】:

    OpenCV Python 包装器文档与普通文档一起保存在同一站点,www.docs.opencv.org

    早期使用的 Python 模块是 cv 接口,它使用原始 C++ 接口的原生数据类型,如 cvMat、cvSeq 等。

    后来它被转移到更好,更高级和更简单的模块cv2接口。在其中,所有内容都以 Numpy 数组或原生 python 数据类型的形式返回。

    这里,返回的元组与 cvBox2D 的参数相同。您可以在此处找到更多关于不同 python 包装器之间差异的详细信息:What is different between all these OpenCV Python interfaces?

    在这里,您的假设是正确的。这些值正是您提到的。

    如果要绘制旋转矩形,则需要矩形的 4 个顶点。为此,您需要一个在文档中从未见过的函数,即 cv2.cv.BoxPoints() (但不要担心,当 OpenCV 2.4.3 发布时,它会在文档中出现。 )

    【讨论】:

    • 不知何故令人失望,似乎他们有postponed您要求将 BoxPoints 添加到文档中,直到 OpenCV 3.0
    【解决方案2】:

    如您链接到的文档中所述,MinAreaRect2 返回Box2D object

    CvBox2D 对象由其中心、大小和角度定义,正如您正确假设的那样,如 here 所述。

    一般来说,Python 包装器的文档相当差。最好的办法是参考 C++ 文档并阅读源代码。

    【讨论】:

    • 感谢您的回答。但是 python 函数不返回一个 Box2D 对象,而是一个 python 元组。所以我想知道元组元素和 C++ Box2D 结构之间的关系。我尝试查看源代码,但找不到可以给我答案的地方。实际上,我很难理解 opencv 库是如何包装到 python 中的。对此的任何暗示都将受到欢迎。
    • 我发现这篇文章很清楚:opencvpython.blogspot.com.es/2012/06/…
    猜你喜欢
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2011-08-16
    • 2020-02-03
    • 2015-03-10
    • 2012-12-14
    相关资源
    最近更新 更多