Я не знаю об 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()
будет довольно бессмысленным - вы просто пишете циклы и сохраняете результат в выбранном вами формате.