如何在 Python 中使用 OpenCV houghcircles() 输出数组参数

How to use the OpenCV houghcircles() output array parameter in Python

cv.houghcircles() 的 OpenCV 文档包括一个可选的输出向量数组,表示为“圆圈”。

cv.HoughCircles( 图像, 方法, dp, minDist[ circles[ param1[ param2[ minRadius[ maxRadius]]]]] ) - > 圈子

在 python 示例中,我没有看到此参数的任何用法。而且,尽管嵌套括号似乎需要使用输出向量参数才能使用以下参数,但我从未见过它被使用过。我确实看到“circles”被用作输出数组,这样该方法的返回输出被分配给“circles”。

circles = cv2.houghcircles(img, method, dp, minDist, param1, param2, minrad, maxrad)

是否将输出向量作为参数传递到仅在 C++ 中使用的调用中,或者 python 中是否存在上下文,其中将输出向量传递到函数调用中,如中所述文档?

(此外,我是否正确地将嵌套括号解释为意味着可选参数的每个嵌套级别都需要前面的级别?)

OpenCV 首先是 C++ API。如果您对其某些 Python API 感到困惑,那是因为生成 Python 绑定是为了使用 C++ API.

C++ API houghCircles "returns" 无效。它通过引用参数将结果传回。许多其他 OpenCV API 都是这样工作的。这与 C++ 情况下处理多个结果的方式一致。

houghCircles 将始终 empty/clear 一个传入的结果 Mat 并用它自己的算法数据填充它。没有理由在这里传递任何 numpy 数组。 IIRC,你可以通过 None.

Python 绑定生成将所有输出标记参数收集到返回的结果元组中。如果 C++ API 本身没有指定参数或没有指定默认参数,则生成还会使用隐式创建的空垫填充 OutputArray 参数。

是的,方括号的嵌套意味着可选参数。你可以使用 named/keyword 参数跳过任何你不想要的,就像这样(使用想象力......):

circles = cv.houghCircles(image, method=..., dp=..., minDist=..., minRadius=...)

谢谢。在仔细考虑您的回答后,我确实在文档中找到了对 python 绑定方法的描述,尽管对于新手来说它很复杂。

https://docs.opencv.org/master/da/d49/tutorial_py_bindings_basics.html

对于其他努力根据官方文档实现方法的人(特别是在 python 包装器中实际实现了哪些输出)...python 教程至少显示了预期的用法对于明确展示的功能。例如,

https://docs.opencv.org/4.5.2/da/d53/tutorial_py_houghcircles.html

以及每个部分和小节的类似文章。

https://docs.opencv.org/4.5.2/d6/d00/tutorial_py_root.html

再次感谢 Rackwitz 提供的信息丰富的答案。