Рейтинг
+2.26
голосов:
2
avatar

OpenCV  

Решение проблемы низкой FPS на некоторых USB камерах

Столкнулся с проблемой в Windows, что камеры на новых ноутбуках и некоторые новые камеры при разрешениях выше 640x480 дают низкое значение FPS использованием видеопотока OpenCV (неважно Си или Си++ интерфейс).
В моем случае было 3 камеры (2 внешние и одна ноутбука), которые ставили разрешение 1280x760, но только одна при этом давала 30 FPS, остальные две камеры давали значение 10 FPS.

Естественно первая идея — установить FPS с помощью CV_CAP_PROP_FPS, но оно не работает для камер. Тогда пришлось смотреть исходники OpenCV и выяснять в каких режимах работает камера.


( Читать дальше )

Контурный анализ - детектирование зашумленного бинарного объекта

Бинарный объект

Бинарный объект – это объект, созданный человеком, и находящийся в поле зрения камеры. К таким объектам относятся дорожные знаки, автомобильные номера, баркоды и т.п. Часто эти объект имеют контур, по которому они достаточно хорошо детектируются. Однако возникают ситуации, когда объекты серьезно наклонены к оси камеры в нескольких плоскостях, а при этом на них накладывается шум:

Здесь: (а) исходный объект, (б) искаженный объект в результате поворота к камере, (в) зашумленный объект
Для правильного распознавания объекта необходимо провести перспективное преобразование. Но для этого необходимо получить 4 точки бинарного объекта.
Цель данной публикации: определить 4 точки в зашумленном объекте изначальной прямоугольной формы.


( Читать дальше )

Максимально стабильные экстремальные области

В компьютерном зрении, максимально стабильные экстремальные регионы (MSER) используются в качестве метода обнаружения больших двоичных объектов в изображениях. Предложен в работе:
J. Matas, O. Chum, M. Urban, and T. Pajdla. «Robust wide baseline stereo from maximally stable extremal regions.» Proc. of British Machine Vision Conference, pages 384-396, 2002.
http://cmp.felk.cvut.cz/~matas/papers/matas-bmvc02.pdf
В OpenCV есть пример их использования mser_sample.cpp, текст которого приведен ниже


( Читать дальше )

Фильтр Калмана

Фи́льтр Ка́лмана — эффективный рекурсивный фильтр, оценивающий вектор состояния динамической системы, используя ряд неполных и зашумленных измерений. Назван в честь Рудольфа Калмана.
В процессе анализа и обработке большого количества числовых данных, непременно возникают проблемы связанные с точностью обрабатываемой информации. Это значит, что какие бы это не были данные они имеют ошибки, связанные с погрешностью прибора, с помощью которого получается данная информация, или это кратковременный сбой, который привел к получению неточных данных. Так или иначе с этими неприятностями надо как то бороться. На помощь приходит очень полезный для данной цели алгоритм фильтра, построенный на основании метода Калмана.


( Читать дальше )

Нормальный Байесовский классификатор в OpenCV

Байесовский классификатор является самым простым методом обучения и часто достаточным при правильном использовании – при правильном выборе признаков распознавания. Классическая задача Байесовского классификатора – это определение наиболее вероятного образа из двух возможных.
Возьмем два образа нормального распределения (здесь и далее я не вдаюсь в подробности, предполагая, что читатель знает об одномерном распознавании образов).
Образ1: мат. ожидание = 10, среднее квадратичное отклонение = 1
Образ2: мат. ожидание = 12, среднее квадратичное отклонение = 1
Если построить для них распределения, то они будут выглядеть следующим образом:


( Читать дальше )

Основы работы с матрицами в OpenCV (C++ интерфейс)

Чтобы разрабатывать собственные алгоритмы компьютерного зрения, необходимо уметь получать доступ к пикселям. Изображение представляет собой двумерную матрицу, которая представлена в виде класса cv::Mat. Каждый элемент матрицы представляет собой один пиксель. Для изображений в градациях серого элемент матрицы представлен 8-битным числом без знака (от 0 до 255). Для цветного изображения в формате RGB таких чисел 3, по одному на каждую компоненту цвета. Формат класса cv::Mat следующий.
class CV_EXPORTS Mat
{
public:
// ... много методов ...
...

/*! включает в себя несколько битовых полей:
- сигнатура
- флаг непрерывности
- глубина
- количество каналов
*/
int flags;
//! размерность массива, >= 2
int dims;
//! количество строк и столбцов или (-1, -1) 
int rows, cols;
//! указатель на данные
uchar* data;

//! указатель на счетчик ссылок; когда массив указан
// на выделенные пользователем данные, то указатель равен NULL
int* refcount;

// другие члены
...
};


( Читать дальше )

Морфологический градиент и анализ цветных изображений

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



( Читать дальше )

Детектирование объектов с помощью особенностей в OpenCV: FREAK. Детектирование множества объектов.

Детектирование объектов с помощью SURF было ранее описано здесь. В этой статье использован C++ интерфейс, FREAK и детектирование множества объектов. Надежность детектирования объектов с помощью FREAK ниже, чем SURF, однако его работа намного быстрее, что позволяет использовать алгоритм на мобильных и встроенных системах. Пример работы представлен на рисунке:

Рассмотрим исходный код, который позволяет этого достигнуть. Код приведен полностью для желающих быстро вставить его в свой проект.


( Читать дальше )

Super Resolution OpenCV: проблема усиления разрешения (суперразрешение)

Основные теоретические моменты, на которых базируются реализованные в OpenCV функции, описаны в работах [1,2]. Основная суть проблемы показана в работе [1]. Есть две копии изображения различного качества:



( Читать дальше )

Шумоподавление на изображениях в OpenCV

В OpenCV существует несколько функций для шумоподавления на изображениях. Шумоподавление используется во многих алгоритмах и не только для обработки фотографий, но и для предварительной обработки в реальном времени. Хотя реализованные в OpenCV функции несколько тяжеловесны. Для тестов возьмем следующее изображение:



( Читать дальше )