Введение в OpenCV МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Государственное образовательное учреждение высшего профессионального образования.

Презентация:



Advertisements
Похожие презентации
Введение в OpenCV МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Государственное образовательное учреждение высшего профессионального образования.
Advertisements

Сложные структуры данных Связные списки. Структуры, ссылающиеся на себя struct node { int x; struct node *next; };
Лекция 14 Динамические данные. Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала.
Распределение памяти. Динамическое выделение памяти.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
OpenCV Библиотека компьютерного зрения для всех Вадим Писаревский Intel Corporation, Software & Solution Group.
Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2. Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в.
Абстрактный тип данных список. Операции над абстрактным списком Создать пустой список Уничтожить список Определить, пуст ли список Определить количество.
Урок 3. Формы представления данных (таблицы, формы, запросы, отчеты)
Построение классификаторов аналогичных каскаду Виолы - Джонса с использованием признаков Хаара и искусственных нейронных сетей Стадник А. В. " Международный.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Лекция 14 Динамические данные. Виды памяти Существует три вида памяти: статическая, стековая и динамическая. Статическая память выделяется еще до начала.
Лабораторная работа 7. Работа с динамической памятью, строками и файлами.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.
УКАЗАТЕЛИ. Переменная - это именованная область памяти с заданным типом. [=значение]; int a; //Переменная типа integer с именем a int b=2;// Переменная.
Информационные технологии Классы памяти auto static extern register Автоматические переменные создаются при входе в функцию и уничтожаются при.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 5 Структуры данных (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков Артем.
Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Нижегородский государственный университет им. Н.И. Лобачевского Лаборатория Информационных технологий (ITLab) Разработка параллельной реализации трекинга.
Основы информатики Массивы. Указатели. Заикин Олег Сергеевич
Транксрипт:

Введение в OpenCV МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Государственное образовательное учреждение высшего профессионального образования «Нижегородский государственный университет им. Н.И. Лобачевского» Радио физический факультет Лаборатория физических основ беспроводной связи Выполнил: Миронов И.М.

OpenCV (Open Source Computer Vision) библиотека компьютерного зрения с открытым исходным кодом Реализована на C/C++, также разрабатывается для Python, Ruby, Matlab, Lua Введение

Поддерживаемые платформы Microsoft Windows: – Microsoft Visual C++ ( ,.NET) – Intel Compiler, – Borland C++, – Mingw (GCC 3.x). – qt Linux (В том числе и MeeGo): – GCC (2.9x, 3.x), – Intel Compiler: «./configure-make-make install» – qt Mac OS X: – GCC (3.x, 4.x) Android: – Android-NDK+cmake

Модули

opencv_core основная функциональность. Включает в себя базовые структуры, вычисления(математические функции, генераторы случайных чисел) и линейную алгебру, DFT, DCT, ввод/вывод для XML и YAWL и т. д.DFTDCT opencv_imgproc обработка изображений (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.). opencv_highgui простой UI, ввод/вывод изображений и видео. opencv_ml статистические модели машинного обучения (SVM, деревья решений, обучение со стимулированием и т. д.).

Модули opencv_features2d распознавание и описание плоских примитивов (SURF, FAST и другие, включая специализированный фреймворк).SURF opencv_video анализ движения и отслеживание объектов (оптический поток, шаблоны движения, устранение фона).оптический поток opencv_objdetect обнаружение объектов на изображении (нахождение лиц с помощью алгоритма Виолы-Джонса (англ.), распознавание людей HOG и т. д.).алгоритма Виолы-Джонсаангл. opencv_calib3d калибровка камеры, поиск стерео- соответстсвия и элементы обработки трехмерных данных.

Модули opencv_flann библиотека быстрого поиска ближайших соседей (FLANN 1.5) и обертки OpenCV. opencv_contrib сопутствующий код, еще не готовый для применения. opencv_legacy устаревший код, сохраненный ради обратной совместимости. opencv_gpu ускорение некоторых функций OpenCV за счет CUDA, создан при поддержке NVidiaCUDA NVidia

Создание окон int cvNamedWindow( const char* name, int flags ); создаёт окно, в которое мы будем выводить наше изображение. – Первый параметр название окна – Второй его размер, 0 даёт возможность изменять размер окна во время выполнения программы, но обычно указывается флаг CV_WINDOW_AUTOSIZE, который указывает, что окно будет ровно тех же размеров, что и загружаемое в него изображение. void cvShowImage( const char* name, const CvArr* image ); эта функия отображает изображение в окне; – первый параметр название окна для вывода картинки, – второй параметр изображение для вывода. int cvWaitKey( int delay=0 ); эта функция останавливает программу и ожидает нажатия клавиши заданное число миллисекунд и продолжает программу, если ничего не нажато.

Освобождение ресурсов void cvReleaseImage( IplImage** image ); функция освобождает память, выделенную под изображение и устанавливает указатель в NULL. void cvDestroyWindow( const char* name ); эта функция закрывает окно и освобождает выделенную память.

Структура изображения IplImage – структур для хранения изображений Наиболее часто используемые поля: – int nSize; – int nChannels; – int depth; – int width; – int height; – char *imageData; – int dataOrder;

Загрузка изображения IplImage* cvLoadImage( const char* filename, int iscolor=CV_LOAD_IMAGE_COLOR ); загружает картинку из файла. – filename имя файла – iscolor определяет как представить картинку iscolor > 0 цветная картинка с 3-мя каналами iscolor == 0 картинка будет загружена в формате GRAYSCALE (градации серого) iscolor < 0 картинка будет загружена как есть

Простейшая программа на OpenCV #include int main(int argc, char** argv) { IplImage *image = cvLoadImage(testimage.jpg, 1); // окно для отображения картинки cvNamedWindow(Test,CV_WINDOW_AUTOSIZE); // показываем картинку cvShowImage(Test, image); // ждём нажатия клавиши cvWaitKey(0); // освобождаем ресурсы cvReleaseImage(& image); // удаляем окно cvDestroyWindow(Test); return 0; }

Детектирование лиц Детектор лица OpenCV использует метод П.Виолы и М.Джонса, который был опубликован в 2001 Этот подход к детектированию объектов на изображении комбинирует четыре ключевые концепции: – Простые прямоугольные функции, называемые функциями Хаара. – Интегральное Изображение для быстрого обнаружения функции. – Метод машинного обучения AdaBoost. – Каскадный классификатор для эффективного совмещения множественных функций.

Функции Харра Функции Харра представляют собой прямоугольные волны одинаковой длины

Интегральное Изображение для быстрого обнаружения функции Харра Интегральное значение для каждого пикселя есть сумма всех пикселей над ним и слева от него. Наличие функции Хаара определяется посредством вычитания среднего значения области темных пикселей из среднего значения области светлых пикселей. Если разница превышает порог (определяется в процессе обучения), тогда говорят, что функция является существующей.

Метод машинного обучения AdaBoost

Каскадный классификатор

Работа с каскадами CvHaarClassifierCascade * cascade – хранит данные классификатора, загруженного из xml файла. Для загрузки XML-данных из файла можно использовать функцию cvLoad() – cascade=(CvHaarClassifierCascade*)cvLoad(cascad e_name, 0, 0, 0);

Буфер памяти CvMemStorage *storage; - динамически расширяемый буфер памяти. В него пишется перечень найденных лиц. storage = cvCreateMemStorage(0); - выделение памяти для буфера. cvReleaseMemStorage(&storage); - освобождение памяти буфера.

Последовательности данных Последовательности - это самостоятельно связанные списки разных структур. Единственный вид объекта, который может храниться в хранилище памяти, является последовательность. В OpenCV последовательности описываются структурой CvSeq.

Структура CvSeq typedef struct CvSeq { int flags; // разные флаги int header_size; // размер заголовка последовательности CvSeq* h_prev; // горизонтально-предыдущая последовательность CvSeq* h_next; // горизонтально-следующая последовательность CvSeq* v_prev; // вертикально-предыдущая последовательность CvSeq* v_next // вертикально-следующая последовательность int total; // общее число элементов int elem_size; // размер элемента последовательности в байтах char* block_max; // максимальная граница последнего блока char* ptr; // текущий указатель на запись int delta_elems; // сколько элементов выделено CvMemStorage* storage; // где хранится последовательность CvSeqBlock* free_blocks; // список свободных блоков CvSeqBlock* first; // указатель на первый блок последовательности }

Доступ к элементам последовательности char* cvGetSeqElem( seq, index ) – возвращает элемент последоваетельности по индексу. – Необходимо делать преобразование типа возвращаемого значения к типу данных в зависимости от хранимых типов в последовательности. Пример получение данных из последовательности for( int i=0; i total; ++i ) { CvPoint* p = (CvPoint*)cvGetSeqElem ( seq, i ); }

Выделение контуров Для выделения контуров в OpenCV существует несколько функций для оконтуривания – cvThreshold – бинаризует изображение – cvLaplace – вычисляет производную от изображения и находит локальные экстремумы – cvSobel – вычисляет оператор собеля – cvCanny – вычисляет фильтр кени

Поиск контуров на изображении int cvFindContours(CvArr* image, CvMemStorage* storage, CvSeq** first_contour, int header_size=sizeof(CvContour), int mode=CV_RETR_LIST, int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) ); - производит поиск контуров и записывает их в хранилище последовательности

Отрисовка контуров void cvDrawContours( CvArr *img, CvSeq* contour, CvScalar external_color, CvScalar hole_color, int max_level, int thickness=1, int line_type=8, CvPoint offset=cvPoint(0,0) ); - отрисовывает контуры записанные в последовательность