Конвертируйте OpenCV Mat или Image в массив NumPy для Tensorflow - PullRequest
0 голосов
/ 07 июня 2019

Этот вопрос касается того, чтобы все работало в .Net для обнаружения объектов Tensorflow. Поскольку я нахожусь в .Net, я использую оболочку EmguCV для своих вызовов OpenCV. Что касается Tensorflow, то и в .Net есть множество обёрток.

Хотя мой вопрос общий, он может быть конкретным .Net, но я так не думаю. Из Emgu или OpenCV я использую VideoCapture для чтения кадров из видеоисточника. Каждый кадр представляет собой мат, который также может быть легко преобразован в изображение OpenCV. Однако для обнаружения объекта Tensorflow требуется некоторый массив изображений, который, как подозревают, является массивом NumPy, в качестве входных данных.

Я нашел много примеров и примеров кода, но большинство из них связано с наличием изображения, такого как jpeg, в файловой системе и чтением его. Не многие имеют отношение к наличию OpenCV Mat или Image и преобразованию этого во входной массив для Tensorflow.

Специально для используемой оболочки Tensorflow, Tensorflow.Net, она на самом деле принимает нечто, называемое FeedItem, как показано здесь Tensorflow.Net , и снова этот пример считывается в файл изображения.

Я пытался понять это. Я попытался взять свойство Mat и Image Data, которое является байтовым массивом, и преобразовать его в массив NumPy, но оно не работает. Я получаю исключения о том, что что-то с зубчатыми массивами не поддерживается.

Итак, кто-нибудь знает, как правильно и эффективно преобразовать эти типы данных изображения в NumPy или что-то, что я могу подать на вход Tensorflow?

Спасибо!

1 Ответ

0 голосов
/ 08 июня 2019

Зубчатые массивы - это, фактически, массивы массивов, где внешний массив содержит вложенные массивы, размещенные в других местах памяти. Вам нужно выделить плоский непрерывный массив того же типа, например,

byte[] data = new byte[numberOfImages * width * height * 3];

и скопируйте байты из свойства Data, которое вы используете, используя CopyTo . (Я не знаком с EmguCV, возможно, есть более эффективный способ сделать это).

Затем преобразуйте data в массив NumPy.

...