OpenCV numpy 到 cv::Mat 的转换

OpenCV numpy to cv::Mat conversion

我继承了一个带有 opencv、shiboken 和 pyside 的应用程序,我的第一个任务是更新到 qt6、pyside6 和 opencv 4.5.5。到目前为止一切顺利,我可以导入模块并制作 class 实例等。但是在传递 numpy 数组时我遇到了崩溃:

我将 numpy 数组形式的图像通过 python 传递到 opencv,我正在使用 pyopencv_to 从数组转换为 cv::Mat。这在以前版本的 opencv (4.5.3) 中有效,但在 4.5.5 中它似乎被破坏了。

当我尝试通过 pyopencv_to 传递数组时,出现异常 opencv_ARRAY_API was nullptr。我的前任通过直接调用 PyInit_cv2() 解决了这个问题,这显然是之前通过 header 包含的。但是我在定义此函数的标签 4.5.3 下的 git 中找不到任何 header。这是生成的文件吗?我可以看到有一个 pycompat.hpp,但它也不包含该功能。

是否有规范的方法来初始化所有内容,以便正确传递 numpy 数组?或者任何人都可以指出我的教程?到目前为止,我的搜索没有产生任何有用的提示。

提前致谢! :)

我终于找到了解决办法。我不知道这是否是正确的做法,但它确实有效。

我制作了一个包含

的头文件
PyMODINIT_FUNC PyInit_cv2();

作为前向声明,然后复制到 modules/python/src2 目录中的所有内容。我假设这已经发生在 cv2.cpp 文件中,因为已经有那一行(在 cv2.cpp 中)。

但显然,仅添加 include 就可以很好地工作。现在我可以在我自己的模块初始化时调用 init 函数,它似乎正确设置了所有需要的状态。