Mat*_*lin 5 c++ python arrays pointers numpy
我正在开发一个项目,必须在Python和C++之间处理图像。为了将图像从 C++ 发送到 Python,我在图像的第一个像素上发送一个指针(作为库Mat
中的对象OpenCV
),在带有两个 for 循环的 Python 中,我使用该指针创建一个 2D numpy 数组。
但我没有成功地以另一种方式做同样的事情:获取 numpy 2D 数组(图像)的第一个像素的内存地址并将其传递给 C++。
假设 x 是我的图像(2D numpy 数组),我尝试了如下解决方案:
x.__array_interface__['data'][0]
但这给出了一个整数,而不是地址x.data
每次我调用它时都会给出不同的值,因为它给我的是临时缓冲区的地址,而不是图像本身预先感谢您的任何建议/帮助。
我找到了一个“简单”的方法来做到这一点:
在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)