10

我正在尝试从 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 中返回的内容。

我找到了有关此功能的官方文档,但这不是很有帮助。

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

4

2 回答 2

12

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

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

后来它被转移到更好、更先进和更简单的模块cv2接口。在其中,所有内容都作为 Numpy 数组或本机 python 数据类型返回。

在这里,返回的元组具有与cvBox2D相同的参数。您可以在此处找到更多关于不同 python 包装器之间差异的详细信息:所有这些 OpenCV Python 接口之间有什么不同?

在这里,你的假设是正确的。这些值完全指定了您提到的内容。

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

在此处输入图像描述

于 2012-08-03T16:26:40.623 回答
1

如您链接到的文档中所述, MinAreaRect2 返回一个Box2D 对象

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

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

于 2012-08-03T12:24:05.217 回答