Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Близнюк_ДВ.docx
Скачиваний:
103
Добавлен:
26.03.2016
Размер:
1.04 Mб
Скачать
    1. Классы и функции, используемые в работе.

      1. Матрицы и типы изображений

IplImage - это базовая структура, которую используют для кодирования изображений. Для работы с векторами в ОpenCV необходимо знать:

  1. В ОpenCV не существует конструкции вектора. При возникновении необходимости вектора можно создать матрицу в 1 одну строку или 1 столбец

  2. Матрица в ОpenCV немного отличается от обычной матрицы, а именно в том, что элементы матрицы могут быть не только целыми числами

В разрабатываемой программе использовалась структура Mat, которая является производной от CvMat, и считается более современной и универсальной. В общем виде Mat – это универсальный класс для матриц действительных или комплексных чисел размерности n или многоканальных изображений, которая в дальнейшем вытеснит CvMat.

Структура Mat хранит получаемое изображение с камеры.

      1. Класс CvCapture

CvCapture - структура содержит необходимую информацию для чтения кадров, приходящих из камеры или видео-файла. В зависимости от источника мы можем вызвать одну из следующих функций для её инициализации:

  1. cvCreateFileCapture

  2. 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.

      1. Класс 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 - максимально возможный размер объекта. Объекты больше игнорируются.