Я выполняю некоторую обработку изображения и хотел бы извлечь определенные значения пикселей из полутонового изображения. Пиксели, которые я хочу извлечь, описываются массивом маски, который имеет те же размеры, что и изображение в оттенках серого.
Это очень легко сделать в python, используя массивы numpy. Пример:
pixels = img[mask != 0]
Может кто-нибудь предложить мне, как сделать это эффективным способом в C ++, используя тип данных opencv cv :: Mat?
Обновление
Я приведу более обширный пример, чтобы прояснить мою проблему.
Предположим, у меня есть серое изображение с именем img с размерами (3,4). У меня также есть массив mask с размерами (3,4). Я хочу извлечь значения из массива img в позиции, которые соответствуют положению ненулевых значений в массиве mask .
Если мы предположим, что массив mask имеет 4 ненулевых элемента, то 4 элемента из массива img необходимо извлечь (скопировать) в новый массив с именем пикселей,
img = np.arange(12).reshape((3,4))
# img = array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11]])
mask = np.zeros_like(img)
mask[0:2, 1] = 255
mask[1, 2:4] = 255
# mask = array([[ 0, 255, 0, 0],
# [ 0, 255, 255, 255],
# [ 0, 0, 0, 0]])
pixels = img[mask != 0]
# pixels = array([1, 5, 6, 7])
Я хочу реализовать ту же функциональность в C ++, используя массивы cv :: Mat. Я понимаю, что это можно сделать с помощью циклов for, но я бы предпочел более эффективное (векторизованное) решение, если оно вообще существует.