OpenCV中numpy数组与cv::Mat的转换

4
我继承了一个带有opencv、shiboken和pyside的应用程序,我的第一个任务是升级到qt6、pyside6和opencv 4.5.5。目前为止,这一切进行得很顺利,我可以导入模块并创建类实例等。但是,当我传递numpy数组时出现了崩溃:
我正在通过Python将以numpy数组形式表示的图像传递给opencv,并使用pyopencv_to将其从数组转换为cv::Mat。这在先前版本的opencv(4.5.3)中有效,但在4.5.5中似乎出现了问题。
当我尝试通过pyopencv_to传递数组时,我会收到异常opencv_ARRAY_API was nullptr。我的前任通过直接调用PyInit_cv2()来解决这个问题,这显然是通过头文件之前包含的。但是,我找不到在标签4.5.3下定义此函数的任何头文件。这是一个生成的文件吗?我可以看到有一个pycompat.hpp,但那里也没有包括此功能。
是否有一种规范的方式来初始化所有内容,以便可以正确地传递numpy数组?或者有人可以指向教程吗?迄今为止我的搜索还没有产生任何有用的提示。
非常感谢您的帮助! :)
1个回答

1

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

我创建了一个包含以下内容的头文件:

PyMODINIT_FUNC PyInit_cv2();

作为前置声明,然后将modules/python/src2目录中的所有内容复制过来。我假设cv2.cpp文件中已经发生了这种情况,因为在cv2.cpp文件中已经有了这样一行代码。
但是仅仅添加该包含语句就可以正常工作。现在,当初始化我的自己的模块时,我可以调用init函数,并且它似乎能够正确设置所有所需的状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接