Я написал функцию, которая эффективно перебирает пиксели изображения в оттенках серого , используя 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 массивах.
Мое изображение хранится в двумерном массиве (я читаю его с помощью cv2)
Я пытался эффективно преобразовать свое изображение из массива np в структуру, аналогичную объекту C ++ Mat, которая дала бы мне такую же эффективность.
Я пробовал несколько подходов, которые я нашел в Интернете, но ни один из них, похоже, не работает. Я использую Python 3.6.6 и Cython 0.28.5
Спасибо
Редактировать: мне удалось реализовать решение, описанное здесь . Теперь у меня есть файл cpp, где я могу вызвать функцию nparrayToMat () из моего файла pyx.
Однако я не могу получить доступ к функции .ptr в Mat.
Буду признателен, если кто-нибудь укажет, как это сделать.