Поиск по блогу

понедельник, 12 апреля 2010 г.

OpenCV. Hand detection

Обучил классификатор для обнаружения правой ладони человека. Добавил функционал для управления курсором.

воскресенье, 11 апреля 2010 г.

OpenCV. HaarClassifier

OpenCV. Обнаружение объектов. Haar-классификатор.

 
#include <stdlib.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace cv;

/*
 *
 */
int main(int argc, char** argv) {

    Mat frame, gray;
    string face_cascade = "/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml";
    CascadeClassifier haar(face_cascade);
    VideoCapture cap(0);
    namedWindow("Video", 1);
    vector<Rect> objects;

    while (true) {
        cap >> frame;
        cvtColor(frame, gray, CV_BGR2GRAY);

        haar.detectMultiScale(gray, objects, 1.5, 16, 0, Size(32,32));
        for (vector<Rect>::const_iterator r = objects.begin(); r != objects.end(); r++)
            rectangle(frame, r->tl(), r->br(), Scalar(0, 0, 255));

        imshow("Video", frame);

        if (waitKey(33) >= 0) break;
    }

    return (EXIT_SUCCESS);
}

CascadeClassifier haar(face_cascade);

 - создаем объект классификатора, в качестве параметра для конструктора используется имя файла xml-файла с описанием характеристик каскада

vector<Rect> objects;

 - вектор прямоугольников, описывающих области с обнаруженными объектами

cvtColor(frame, gray, CV_BGR2GRAY);

 - конвертируем цветное изображение в черно-белое

haar.detectMultiScale(gray, objects, 1.5, 16, 0, Size(32,32));

 - ищем объекты на изображении gray и сохраняем объекты в вектор objects
        - 1.5 - scale-параметр
        - 16 - минимальное количество соседей
        - 0 - флаги
        - Size(32, 32) - минимальный размер подобласти, с которой начинается поиск объекта

rectangle(frame, r->tl(), r->br(), Scalar(0, 0, 255));

 - рисуем прямоугольник на изображении frame

пятница, 9 апреля 2010 г.

OpenCV. Part 1.

OpenCV. Простое приложение.

Пример простого приложения, выводящего изображение с камеры.

#include <stdlib.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>

using namespace cv;
/*
 * 
 */
int main(int argc, char** argv) {

    Mat frame;
    VideoCapture cap(0);
    namedWindow("Video", 1);
    
    while(true)
    {
        cap >> frame;
        imshow("Video", frame);
        
        if (waitKey(33) >= 0) break;
    }

    return (EXIT_SUCCESS);
}

#include <opencv/cv.h>
#include <opencv/highgui.h>

 - заголовочные файлы для OpenCV

using namespace cv;

 - подключение пространства имен для OpenCV

Mat frame;

 - создаем объект изображения(на самом деле структура сложнее, но для первых программ и так сойдет:))

VideoCapture cap(0); - создаем объект для захвата видео с камеры

namedWindow("Video", 1);

 - определяем именованное окно

cap >> frame;

 - захватываем изображение с камеры и сохраняем в объекте frame

imshow("Video", frame);

 - показываем изображение

if (waitKey(33) >= 0) break;

 - в течение 33 миллисекунд ждем нажатия клавиши, если была нажата какая-нибудь клавиша, то выходим из цикла

Вот простой пример приложения, использующего библиотеку OpenCV. На его основе будем создавать более сложные приложения, но в следующий раз.
Удачи. :)

OpenCV. Introduction

OpenCV. Как и что ?

Во время исследований по моему диплому, связанному с распознаванием образов, на толкнулся на библиотеку OpenCV. Показалась довольно замечательной штукой. Но к сожалению документации по ней на русском языке весьма не густо, поэтому решил начать цикл статей по описанию работы с этой библиотекой. В качестве источника информации пока буду ограничиваться книгой "Learning OpenCV" и документацией по OpenCV с сайта opencv.willowgarage.com.