Проблема преобразования Python np.ndarray (изображение) в C ++ Mat с использованием Cython - PullRequest
0 голосов
/ 16 ноября 2018

Я написал функцию, которая эффективно перебирает пиксели изображения в оттенках серого , используя 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.

Буду признателен, если кто-нибудь укажет, как это сделать.

...