2014-06-30 2 views
1

То, что я пытаюсь сделать, это создать две строки на двоичном изображении (один вертикальный, один горизонтальный). Затем верните все значения строки/столбца вместе с значениями пикселей ниже этой строки и поместите их в список python.Функция Matlab (improfile) в OpenCV - Python 2.7

В Matlab вы можете сделать это аналогичным образом, запустив improfile() на двоичном изображении, где вы установили бинарное изображение на значение «10/255» на im2bw(image,10/255).

Возможно ли это с помощью opencv в Python?

ответ

1

OpenCV (модуль cv2) изображения могут обрабатываться как numpy.array s.

Итак, если вы сначала хотите, чтобы преобразовать изображение в черно-белое:

bwimg = image > 10 

Это создает массив True/False значений, в зависимости от того, соответствующий элемент в bwimg составляет более 10 или нет , Масштабирование интенсивности обычно составляет 0,255, если вы прочитали изображение из файла. (Это могут быть и другие значения.)

Если вы хотите иметь значения на горизонтальной линии от пикселя (23,57) до (86,57), вы просто выбираете соответствующие значения из массива :

pixels = bwimg[57, 23:87] 

Теперь у вас есть массив значений True/False. Если вы хотели бы иметь число, умножить его на 1:

pixels = 1 * bwimg[57, 23:87] 

Вертикальная линия проходит аналогично:

pixels = bwimg[2:65, 47] 

кирки пикселей 2..64 (обратите внимание, что конец диапазона исключается) на колонке 47.

Просто Гоча для пользователей Matlab: индексы массива Python начинаются с 0.

+0

Отлично! Можно ли посмотреть на эти массивы numpy и найти местоположение x, y первых/последних значений «True» в массивах пикселей? Я просто пытаюсь найти, где пиксели> 10 начинаются в каждом горизонтальном/вертикальном профиле. Благодаря! –

+1

@Spatial Pariah: Существует несколько способов. Если у вас есть профиль в 'v', вы получаете список всех ненулевых (не-False):: nz = numpy.nonzero (v) [0]'. Если вы хотите увидеть первый из этих списков, используйте 'nz [0]', для последнего используйте 'nz [-1]'. (Вы можете применить это к изображению без BW, просто используя, например, 'numpy.nonzero (x> 10)'. Это возвращает индексы для всех элементов, которые больше 10 в 'x'. – DrV

0

C интерфейс для OpenCV имеет cvSampleLine function что

Выбирает пиксели, относящиеся к указанному сегменту линии, и сохраняет их в буфер.

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