2016-01-25 2 views
0

Я пытаюсь понять образец OpenCV stereo_match.py. Место, где вычисляются маски, out_points и out_colors, я не могу понять. Код относящийся к тому, что приведен ниже:Понимание кода OpenCV с кодом stereo_match.py ​​

mask = disp > disp.min() 
out_points = points[mask] 
out_colors = colors[mask] 

Вот, что я знаю, маска, очки и цвета Numpy массивы размером 555x641. Когда вышеуказанная операция завершена, out_points и out_colors становятся массивами 300000x3.

Какова логика этого и как вы достигаете этой функции в чистом питоне (это означает, что точки, цвета и маска являются нормальными массивами, и мне нужно выполнить описанную выше операцию с помощью numpy и вычислить out_points и out_colors)?

Спасибо

ответ

1

Я объясню код:

mask = disp > disp.min() 

Здесь маска представляет собой 2D массив с одной и той же высотой и шириной, как DISP, но все значения сохраняются как логическое значение. Каждое значение из ИЗОБ рассчитывается из логики утверждения: х> disp.min()

out_points = points[mask] 
out_colors = colors[mask] 

Эти массивы являются все значения из точек и цветов, которые были сохранены в качестве Правда в маске массива. Поскольку ваше изображение 555x641 = 350 тыс. Пикселей, массивы 300 тыс. Находятся в пределах размера. Поскольку цветные изображения имеют три слоя, 300k x 3 имеет смысл.

Вы можете выполнять эти операции без numpy, но я думаю, что это немного замедлит ваш код. Если у вас есть другие вопросы, пожалуйста, спросите!

+0

Да, я смог понять, что out_points и out_colors вычисляются таким образом, но теперь я пытаюсь выяснить, как массивы изменились с массивов 555x641 на 3000000x3. Если значения out_points и out_colors вычисляются, если значение маски было истинным, то оно должно быть массивами размером менее 555x641, правильно? Есть ли чистый код Python, который вы можете объяснить с помощью? Спасибо – dvenkatsagar

+0

вы уверены, что это 3M, а не 300k? Если это 3М, то я согласен, что это странно. –

+0

Да, 300K не 3M, извините. Я экспериментировал с numpy.ndarrays, и я попытался выполнить повторную операцию. Я понял, что если взять два массива одинаковых размеров и выполнить описанную выше операцию, то он создаст массив 1D. Но дело в том, что точки - это 3D-массив, а маска - 2D, а out put - это 2D-массив. Когда я пробовал то же самое в эксперименте, это дает мне ошибку «оси из связанной», что очень странно. – dvenkatsagar

Смежные вопросы