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

Выполнил : Миронов И.М

  • Upload
    clovis

  • View
    83

  • Download
    0

Embed Size (px)

DESCRIPTION

Министерство образования и науки Российской федерации Государственное образовательное учреждение высшего профессионального образования «Нижегородский государственный университет им. Н.И. Лобачевского» Радио ф изический факультет Лаборатория физических основ беспроводной связи. - PowerPoint PPT Presentation

Citation preview

Page 1: Выполнил : Миронов  И.М

“Введение в OpenCV”

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

«Нижегородский государственный университет им. Н.И. Лобачевского»

Радио физический факультет

Лаборатория физических основ беспроводной связи

Выполнил: Миронов И.М.

Page 2: Выполнил : Миронов  И.М

• OpenCV (Open Source Computer Vision) — библиотека компьютерного зрения с открытым исходным кодом

• Реализована на C/C++, также разрабатывается для Python, Ruby, Matlab, Lua

Введение

Page 3: Выполнил : Миронов  И.М

Поддерживаемые платформы• Microsoft Windows:

– Microsoft Visual C++ (6.0-9.0, .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

Page 4: Выполнил : Миронов  И.М

Модули

Page 5: Выполнил : Миронов  И.М

Модули• opencv_core — основная функциональность. Включает в себя

базовые структуры, вычисления(математические функции, генераторы случайных чисел) и линейную алгебру, DFT, DCT, ввод/вывод для XML и YAWL и т. д.

• opencv_imgproc — обработка изображений (фильтрация, геометрические преобразования, преобразование цветовых пространств и т. д.).

• opencv_highgui — простой UI, ввод/вывод изображений и видео.

• opencv_ml — статистические модели машинного обучения (SVM, деревья решений, обучение со стимулированием и т. д.).

Page 6: Выполнил : Миронов  И.М

Модули• opencv_features2d — распознавание и описание плоских

примитивов (SURF, FAST и другие, включая специализированный фреймворк).

• opencv_video — анализ движения и отслеживание объектов (оптический поток, шаблоны движения, устранение фона).

• opencv_objdetect — обнаружение объектов на изображении (нахождение лиц с помощью алгоритма Виолы-Джонса (англ.), распознавание людей HOG и т. д.).

• opencv_calib3d — калибровка камеры, поиск стерео-соответстсвия и элементы обработки трехмерных данных.

Page 7: Выполнил : Миронов  И.М

Модули

• opencv_flann — библиотека быстрого поиска ближайших соседей (FLANN 1.5) и обертки OpenCV.

• opencv_contrib — сопутствующий код, еще не готовый для применения.

• opencv_legacy — устаревший код, сохраненный ради обратной совместимости.

• opencv_gpu — ускорение некоторых функций OpenCV за счет CUDA, создан при поддержке NVidia

Page 8: Выполнил : Миронов  И.М

Создание окон• int cvNamedWindow( const char* name, int flags ); — создаёт окно, в

которое мы будем выводить наше изображение. – Первый параметр — название окна– Второй — его размер, 0 — даёт возможность изменять размер окна во время

выполнения программы, но обычно указывается флаг CV_WINDOW_AUTOSIZE, который указывает, что окно будет ровно тех же размеров, что и загружаемое в него изображение.

• void cvShowImage( const char* name, const CvArr* image );— эта функия отображает изображение в окне;

– первый параметр — название окна для вывода картинки,– второй параметр — изображение для вывода.

• int cvWaitKey( int delay=0 ); — эта функция останавливает программу и ожидает нажатия клавиши заданное число миллисекунд и продолжает программу, если ничего не нажато.

Page 9: Выполнил : Миронов  И.М

Освобождение ресурсов

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

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

Page 10: Выполнил : Миронов  И.М

Структура изображения

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

Page 11: Выполнил : Миронов  И.М

Загрузка изображения• IplImage* cvLoadImage( const char* filename, int

iscolor=CV_LOAD_IMAGE_COLOR ); — загружает картинку из файла.– filename — имя файла– iscolor — определяет как представить картинку

iscolor > 0 — цветная картинка с 3-мя каналамиiscolor == 0 — картинка будет загружена в формате

GRAYSCALE (градации серого)iscolor < 0 — картинка будет загружена как есть

Page 12: Выполнил : Миронов  И.М

Простейшая программа на OpenCV• #include <highgui.h>

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;}

Page 13: Выполнил : Миронов  И.М

Детектирование лиц• Детектор лица OpenCV использует метод П.Виолы и

М.Джонса, который был опубликован в 2001• Этот подход к детектированию объектов на изображении

комбинирует четыре ключевые концепции:– Простые прямоугольные функции, называемые функциями

Хаара.– Интегральное Изображение для быстрого обнаружения

функции.– Метод машинного обучения AdaBoost.– Каскадный классификатор для эффективного совмещения

множественных функций.

Page 14: Выполнил : Миронов  И.М

Функции Харра

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

Page 15: Выполнил : Миронов  И.М

Интегральное Изображение для быстрого обнаружения функции Харра

• Интегральное значение для каждого пикселя есть сумма всех пикселей над ним и слева от него.

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

Page 16: Выполнил : Миронов  И.М

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

Page 17: Выполнил : Миронов  И.М

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

Page 18: Выполнил : Миронов  И.М

Работа с каскадами

• CvHaarClassifierCascade * cascade – хранит данные классификатора, загруженного из xml файла.

• Для загрузки XML-данных из файла можно использовать функцию cvLoad()– cascade=(CvHaarClassifierCascade*)cvLoad(cascad

e_name, 0, 0, 0);

Page 19: Выполнил : Миронов  И.М

Буфер памяти

• CvMemStorage *storage; - динамически расширяемый буфер памяти. В него пишется перечень найденных лиц.

• storage = cvCreateMemStorage(0); - выделение памяти для буфера.

• cvReleaseMemStorage(&storage); - освобождение памяти буфера.

Page 20: Выполнил : Миронов  И.М

Последовательности данных

• Последовательности - это самостоятельно связанные списки разных структур.

• Единственный вид объекта, который может храниться в хранилище памяти, является последовательность.

• В OpenCV последовательности описываются структурой CvSeq.

Page 21: Выполнил : Миронов  И.М

Структура CvSeqtypedef 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; // указатель на первый блок последовательности }

Page 22: Выполнил : Миронов  И.М

Доступ к элементам последовательности

• char* cvGetSeqElem( seq, index ) – возвращает элемент последоваетельности по индексу. – Необходимо делать преобразование типа

возвращаемого значения к типу данных в зависимости от хранимых типов в последовательности.

• Пример получение данных из последовательностиfor( int i=0; i<seq->total; ++i ) { CvPoint* p = (CvPoint*)cvGetSeqElem ( seq, i );}

Page 23: Выполнил : Миронов  И.М

Выделение контуров

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

изображения и находит локальные экстремумы– cvSobel – вычисляет оператор собеля– cvCanny – вычисляет фильтр кени

Page 24: Выполнил : Миронов  И.М

Поиск контуров на изображении

• 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)

); - производит поиск контуров и записывает их в хранилище последовательности

Page 25: Выполнил : Миронов  И.М

Отрисовка контуров

• 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) ); - отрисовывает контуры записанные в последовательность