从 numpy 数组获取指针以将图像发送到 C++

Mat*_*lin 5 c++ python arrays pointers numpy

我正在开发一个项目,必须在PythonC++之间处理图像。为了将图像从 C++ 发送到 Python,我在图像的第一个像素上发送一个指针(作为库Mat中的对象OpenCV),在带有两个 for 循环的 Python 中,我使用该指针创建一个 2D numpy 数组。

但我没有成功地以另一种方式做同样的事情:获取 numpy 2D 数组(图像)的第一个像素的内存地址并将其传递给 C++。

假设 x 是我的图像(2D numpy 数组),我尝试了如下解决方案:

  • x.__array_interface__['data'][0]但这给出了一个整数,而不是地址
  • x.data每次我调用它时都会给出不同的值,因为它给我的是临时缓冲区的地址,而不是图像本身

预先感谢您的任何建议/帮助。

Mat*_*lin 3

我找到了一个“简单”的方法来做到这一点:

C++中,该函数必须将 a 作为参数void * ptr,这样我可以使用从 Python 发送的指针创建一个 Mat 对象:

void myCfunction(void* ptr){
    Mat matrix = Mat(sizes, CV_8UC1, (uchar*)ptr);
}
Run Code Online (Sandbox Code Playgroud)

并且,在Python中,使用__array_interface__来获取内存地址(int类型,奇怪):

mydll.myFunction(myNumpyArray.__array_interface__['data'][0], ...)
Run Code Online (Sandbox Code Playgroud)