Управление массивами Python C ++ эквивалент - PullRequest
0 голосов
/ 29 февраля 2012

Я знаю, что SO - это не напрокат, но у меня есть очень простой пример на python, который мне нужно помочь с переводом на C ++

grey_image_as_array = numpy.asarray( cv.GetMat( grey_image ) )

non_black_coords_array = numpy.where( grey_image_as_array > 3 )

# Convert from numpy.where()'s two separate lists to one list of (x, y) tuples:
non_black_coords_array = zip( non_black_coords_array[1], non_black_coords_array[0] )

Первый, довольно простой, я думаю, линейный индексируемый массивсоздается с тем, что байты перезагружены из cv.GetMat, верно?

Что будет эквивалентно where Питона и особенно этой zip функции?

1 Ответ

0 голосов
/ 29 февраля 2012

Я не знаю об OpenCV, поэтому не могу сказать вам, что делает cv.GetMat().По-видимому, он возвращает то, что может быть использовано или преобразовано в двумерный массив.Интерфейс C или C ++ для OpenCV, который вы используете, вероятно, будет иметь аналогичную функцию имен.

В следующих строках создается массив пар индексов записей в grey_image_as_array, которые больше 3.Каждая запись в non_black_coords_array - это xy-координаты, начинающиеся с нуля, в grey_image_as_array.Учитывая такую ​​пару координат x, y, вы можете получить доступ к соответствующей записи в двумерном массиве C ++ grey_image_as_array с помощью grey_image_as_array[y][x].

Код Python должен избегать явных циклов надизображение, чтобы достичь хорошей производительности, поэтому оно должно быть сделано с векторизованными функциями NumPy.Выражение grey_image_as_array > 3 является векторизованным сравнением и приводит к логическому массиву той же формы, что и grey_image_as_array.Затем numpy.where() извлекает индексы True записей в этом логическом массиве, но результат не в формате, описанном выше, поэтому нам нужно zip() для его реструктуризации.

В C ++ естьне нужно избегать явных циклов, а эквивалент numpy.where() будет довольно бессмысленным - вы просто пишете циклы и сохраняете результат в выбранном вами формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...