我编写了一个函数,该函数使用C ++有效地循环遍历灰度图像像素。关键是使用指向图像行/列的指针,而不是常规的像素访问。
C ++逻辑如下:
Mat image = imread(image_path); //path for the image
for (int j = 0; j < rawDepth.rows; j++)
{
const ushort* Mi = rawDepth.ptr<ushort>(j); //pointer to the current column
for (int i = 0; i < rawDepth.cols; i++)
{
ushort pixelValue = Mi[i]; //value of the pixel
}
}
此方法非常快,但我需要在Python上运行。我能够使用Cython成功重写它,但是现在我遇到了获取指向numpy nd数组中的列的指针的问题。
我的图片存储在2D numpy数组中(我使用cv2读取了图片)
我一直在尝试将图像从np数组有效地转换为类似于C ++ Mat对象的结构,从而获得相同的效率。
我尝试了几种在网上找到的方法,但似乎都没有用。我正在使用Python 3.6.6和Cython 0.28.5
谢谢
编辑:我能够实现here中描述的解决方案。我现在有一个cpp文件,可以从pyx文件中调用nparrayToMat()函数。
但是,我似乎无法访问Mat的.ptr函数。
如果有人能指出如何做到这一点,我将不胜感激。