- •Аннотация
- •Реферат
- •Содержание
- •Введение
- •Анализ технического задания
- •Описание метода Viola Jones
- •1.1.2 Интегральное представление изображений
- •1.1.3 Признаки Хаара
- •1.1.5 Бустинг
- •Синтез Алгоритмов работы
- •Алгоритм основной программы:
- •Словесныйалгоритм:
- •Алгоритм работы подпрограммы detectAndDisplay:
- •Разработка программного решения
- •Разработка интерфейса программы
- •Классы и функции, используемые в работе.
- •Матрицы и типы изображений
- •Класс CvCapture
- •Технико-экономическоеобоснование работы
- •Обоснование актуальности и целесообразности разработки
- •Обоснование выбора аналога и критериев для сравнения
- •Расчет технико-экономических показателей разработки
- •Расчет единовременных квартальных затрат на этапе разработки.
- •Расчет сравнительной технико-экономической эффективности разработки.
- •Заключение
- •Безопасность человеко-машинного взаимодействия
- •Заключение
Классы и функции, используемые в работе.
Матрицы и типы изображений
IplImage - это базовая структура, которую используют для кодирования изображений. Для работы с векторами в ОpenCV необходимо знать:
В ОpenCV не существует конструкции вектора. При возникновении необходимости вектора можно создать матрицу в 1 одну строку или 1 столбец
Матрица в ОpenCV немного отличается от обычной матрицы, а именно в том, что элементы матрицы могут быть не только целыми числами
В разрабатываемой программе использовалась структура Mat, которая является производной от CvMat, и считается более современной и универсальной. В общем виде Mat – это универсальный класс для матриц действительных или комплексных чисел размерности n или многоканальных изображений, которая в дальнейшем вытеснит CvMat.
Структура Mat хранит получаемое изображение с камеры.
Класс CvCapture
CvCapture - структура содержит необходимую информацию для чтения кадров, приходящих из камеры или видео-файла. В зависимости от источника мы можем вызвать одну из следующих функций для её инициализации:
cvCreateFileCapture
cvCreateCameraCapture
Функция СvCreateFileCapture() создаёт и инициализирует структуру CvCapture для чтения из видео-файла. Данная функция принимает всего один аргумент – это имя видео файла:
CvCapture* cvCreateFileCapture( const char* filename );
СvCreateCameraCapture() создаёт и инициализирует структуру CvCapture для чтения видео-потока с камеры, которая в качестве параметра принимает не название файла, а идентификатор камеры. Идентификатор показывает HighGUI, где искать камеру. Идентификатор - это тип, имеющийся у вас камеры. Значения, которые может принять идентификатор, описаны в таблице 1:
Таблица 1. Значения идентификатора.
Константа |
Значение |
CV_CAP_ANY |
0 |
CV_CAP_MIL |
100 |
CV_CAP_VFW |
200 |
CV_CAP_V4L |
200 |
CV_CAP_V4L2 |
200 |
CV_CAP_FIREWIRE |
300 |
CV_CAP_IEEE1394 |
300 |
CV_CAP_DC1394 |
300 |
CV_CAP_CMU1394 |
300 |
В большинстве случаев идентификатор не является обязательным, когда у вас только одна камера, для этого достаточно использовать константу CV_CAP_ANY. Также в функцию можно передать значение -1, тогда OpenCV выведет окно, позволяющее выбрать нужную камеру.
CvCapture* cvCreateCameraCapture( int index );
С помощью cvGetCaptureProperty() можно задать свойства CvCapture. Значения идентификатора, которые может принимать cvGetCaptureProperty(), описаны в таблице 2:
Таблица 2. Свойства CvCapture
Константа |
Значение |
CV_CAP_PROP_POS_MSEC |
Позиция в миллисекундах фильма с начала файла. |
CV_CAP_PROP_POS_FRAME |
Позиция в фреймах (только для видео-файла). |
CV_CAP_PROP_POS_AVI_RATIO |
Относительное положение в файле (0 – начало, 1 – конец). |
CV_CAP_PROP_FRAME_WIDTH |
Ширина фреймов в видео-потоке (только для камеры). |
CV_CAP_PROP_FRAME_HEIGHT |
Высота фреймов в видео-потоке (только для камеры). |
CV_CAP_PROP_FPS |
Фреймовый показатель – частота кадров (только для камеры). |
CV_CAP_PROP_FOURCC |
4-х символьный код кодека (только для камеры). |
CV_CAP_PROP_FRAME_COUNT |
Количество кадров в файле |
cvQueryFrame осуществляет захват фрейма, декомпрессию и возвращает картинку. Эта функция является комбинацией функций cvGrabFrame и cvRetrieveFrame за один вызов. Функция cvGrabFrame() принимает указатель на CvCapture, и возвращает 1 если захват был успешен, и 0 если нет. cvGrabFrame() копирует изображение во внутренний буфер, недоступный для пользователя. Функция cvGrabFrame() получает необработанный кадр, чтобы как можно быстрее получить кадр.
После вызова cvGrabFrame(), можно сразу же вызывать cvRetrieveFrame(). Эта функция выполнит все необходимые преобразования и вернёт IplImage* на другой внутренний буфер, если же после будет вызвана функция cvGrabFrame(), то этот буфер будет перезаписан, поэтому если необходимо делать какие-то махинации над изображением, то его необходимо скопировать.
Освободить память CvCapture неё с помощью cvReleaseCapture(). Как и многие другие функции OpenCV для освобождения памяти, cvReleaseCapture() принимает указатель на указатель на CvCapture.
Класс CascadeClassifier
Каскадирование является частным случаем обучения ансамбля, на основе объединенных нескольких классификаторов, которые используют всю информацию, пришедшую с выхода из данного классификатора в качестве дополнительной информации для следующего классификатора в каскаде. Каскадирование является многоступенчатой системой, в отличие от «стековых» ансамблей.
Класс CascadeClassifier специализирован под обнаружение объектов.
Пример кода загрузки классификатора из файла:
CascadeClassifier::CascadeClassifier(const string& filename)
Параметры:
filename - имя файла, из которого загружается классификатор.
CascadeClassifier::empty проверяет: загружен ли классификатор.
Пример кода:
Bool CascadeClassifier::empty() const
CascadeClassifier::load - загрузка классификатора из файла. Пример кода:
Bool CascadeClassifier::load(const string & filename)
Параметры:
filename - имя файла, из которого загружается классификатор. Файл может содержать старый классификатор Хаара, обученный приложением haartraining или новый каскад классификаторов, обученный приложением traincascade.
CascadeClassifier::read - читает классификатор из хранилища файлов узла. Файл может содержать только новый каскадный классификатор (обучение приложений traincascade). Пример кода:
Bool CascadeClassifier::read(const FileNode & node)
CascadeClassifier::detectMultiScale - Обнаруживает объекты различных размеров в исходном изображении. Обнаруженные объекты возвращаются, как список прямоугольников. Пример кода:
Void CascadeClassifier::detectMultiScale(const Mat & image, vector<Rect>&objects, double scaleFactor=1.1, Size minSize=Size(), Size maxSize=Size())
Параметры:
cascade - классификатор каскада Хаара. Каскад могжет быть загружен из XML- файла, используя функцию Load(). Когда каскад станет не нужен, отпустите его с помощью cvReleaseHaarClassifierCascade(&cascade)
image - Матрица типа CV_8U , содержащая изображение, на котором обнаружены объекты.
objects - Вектор прямоугольников, где каждый прямоугольник содержит обнаруженный объект.
scaleFactor - параметр, определяющий на сколько уровней уменьшился размер изображения.
minNeighbors - параметр, определяющий сколько кандидатов. Каждый кандидат должен иметь прямоугольник, чтобы сохранить его.
MinSize – минимальная граница возможного размера объекта. Объекты меньше игнорируются.
MaxSize - максимально возможный размер объекта. Объекты больше игнорируются.