Как извлечь линейный срез из изображения в OpenCV / EMGU - PullRequest
0 голосов
/ 09 февраля 2011

У меня есть изображение и две точки,
и я хочу прочитать пиксели между этими двумя точками,
и перепрошить их в небольшой массив 1x40.
Я использую EMGU, который является оболочкой C # для OpenCV.
спасибо,
SW

Sample image

Ответы [ 3 ]

4 голосов
/ 12 февраля 2011

Что вы ищете, это Алгоритм Брезенхема .Это позволит вам получить точки в массиве пикселей, которые лучше всего приближаются к прямой линии.Ссылка на Википедию также содержит код psuedo, с которого можно начать.

3 голосов
/ 01 ноября 2011

Emgu CV включает метод в классе Image для выборки цвета по линии, называемой Sample.

См. Определение в руководстве . Вот ссылка на Image.Sample в версии 2.3.0.

Вам все равно придется повторно выбрать / интерполировать точки в массиве, возвращенном из Sample, чтобы получить 40массив элементов.Поскольку существует несколько способов повторной выборки, я предлагаю вам обратиться к другим вопросам для этого.

2 голосов
/ 09 февраля 2011

Поворот и обрезка

Сначала я бы попытался сделать это так:

  • вычислить матрицу вращения с (GetRotationMatrix2D)
  • Деформируйте изображение так, чтобы эта линия была горизонтальной (WarpAffine)
  • рассчитать новые позиции двух ваших очков (вы можете использовать Transform)
  • получить прямоугольник изображения подходящей ширины и высотой 1 пиксель (GetRectSubPix)

Интерполяция здесь и там может повлиять на результаты, но вам все равно придется интерполировать. Вы можете обрезать изображение перед поворотом.

Итерация по 8 связанным пикселям линии

В противном случае вы можете использовать итератор линии для перебора пикселей между двумя точками. См. Документацию для InitLineIterator (Извините, ссылка на версию OpenCV на Python, я никогда не слышал об EMGU). Я полагаю, что в этом случае вы перебираете пиксели строки, которая не была сглажена. Но это должно быть намного быстрее.

Интерполировать вручную

Наконец, вы можете преобразовать изображение в массив, вычислить, через какие элементы проходит линия, выполнить выборку и интерполировать вручную.

...