OpenCV (компьютерное зрение). Установка под MSVS 2008. «Hello World»

    image
    OpenCV — это библиотека алгоритмов компьютерного зрения, обработки изображений. Исходный код является октрытым.

    Эта вещь очень интересная и ей можно найти много применений: идентификация пользователя за компьютером, распознавание предметов, трэкинг объектов, а уж в робототехнике применений ещё больше!

    В этом посте я опишу подробную установку данной библиотеки и мы напишем простейшую программу — этакий «Hello World» в компьютерном зрении. :)


    Установка.


    1.
    Вам нужно скачать и установить OpenCV для Windows. Лучше скачайте версию 1.0 — эта версия создавалась ещё в Intel.
    opencvlibrary.sourceforge.net (Я проинсталлировал в дефолтную папку C:/Program Files/OpenCV/)

    2.
    Скачайте и установите MS Visual Studio 2008, если вы ещё этого не сделали или MS Visual C++ 2008 Express Edition по ссылке www.microsoft.com/express/vc (о регистрации, думаю, напоминать не нужно:)).

    3.
    Теперь у вас установлено всё необходимое, поэтому приступим к включению OpenCV в MSVS 2008:
    • В главном меню, выберите Tools->Options (Сервис->Параметры).
    • В списке справа, выберите Projects and Solutions->VC++ Directories (Проекты и решения->Каталоги VC++)
    • Сначала, из «Show Directories for:» («Показать каталоги для:») листбокса выберите «Include Files» («Включаемые файлы»).
    • Кликните на иконке Insert New (Вставить строку) и добавляйте следующие строки:

    «C:\Program Files\OpenCV\cv\include»
    «C:\Program Files\OpenCV\cxcore\include»
    «C:\Program Files\OpenCV\otherlibs\highgui»
    «C:\Program Files\OpenCV\cvaux\include»
    «C:\Program Files\OpenCV\otherlibs\cvcam\include»
    «C:\Program Files\OpenCV\ml\include»
    «C:\Program Files\OpenCV\otherlibs\_graphics\include»
    «C:\Program Files\OpenCV\otherlibs\_graphics\include\jasper»
    Результат можете увидеть на скриншоте.
    image

    Далее выберите в листбоксе «Library files» («Файлы библиотек») и добавьте
    следующие строки:
    «C:\Program Files\OpenCV\lib»
    «C:\Program Files\OpenCV\otherlibs\_graphics\lib»
    image

    Затем, в том же листбоксе выберите «Source Files» («Файлы исходного кода») и добавьте:
    «C:\Program Files\OpenCV\cv\src»
    «C:\Program Files\OpenCV\cxcore\src»
    «C:\Program Files\OpenCV\cvaux\src»
    «C:\Program Files\OpenCV\otherlibs\highgui»
    «C:\Program Files\OpenCV\otherlibs\cvcam\src\windows»
    «C:\Program Files\OpenCV\ml\src»
    «C:\Program Files\OpenCV\otherlibs\_graphics\src»
    image

    4.
    Когда будете создавать новый проект с использованием OpenCV нужно проделать следующее:

    — В MSVS выберите File->Create->Project (Файл->Создать->Проект) и создайте консольное приложение в VC++
    image

    • В открытом проекте выберите: Project->Properties (Проект->Свойства).
    • Далее Configuration Properties->Linker->Input
    • И добавляйте имена библиотек в поле «Additional Dependencies» (Дополнительные зависимости): cxcore.lib cv.lib highgui.lib cvaux.lib cvcam.lib

    image

    Запомните, что при переходе из режима Debug в Release вам потребуется заново добавлять библиотеки в «Дополнительные зависимости»!

    Итак с настройками закончено и мы можем приступить к первой программе!

    Первая программа.


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

    OpenCV предоставляет возможности по работе с широким набором типов изображений, а также видео и видео-потоками с камер. Эти возможности являются частью библиотеки HighGUI, которая включена в пакет OpenCV.

    Вот листинг нашей первой программы:

    #include "stdafx.h"
    #include "highgui.h"

    int main (int argc, char** argv)
    {
    IplImage* img = cvLoadImage( argv[1] );
    cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE);
    cvShowImage( "Example1", img );
    cvWaitKey(0);
    cvReleaseImage( &img );
    cvDestroyWindow( "Example1" );
    }

    Эту программу нужно запустить из командной строки, передав ей в качестве первого параметра путь к изображению.
    image
    В качестве изображения для загрузки я выбрал скрин с первой программы.

    Рассмотрим принцип работы. При запуске, программа загружает в память изображение, переданное, первым агрументом и выводит его на экран, затем ожидает нажатия любой клавиши и после нажатия закрывается.

    Теперь рассмотрим каждую команду в отдельности.

    IplImage* img = cvLoadImage( argv[1] );
    Эта строка непосредственно загружает изображение. Функция cvLoadImage() сама выделяет нужный объём памяти для изображения и может работать с большим числом форматов, включая:
    BMP, DIB, JPEG, JPE, PNG, PBM, PGM, PPM, SR, RAS, и TIFF. В результате она возвращает указатель на структуру данных изображения. Эта структура называется IplImage. Мы используем указатель cvLoadImage() для работы с изображение и его данными.

    cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE);
    cvNamedWindow() создаёт окно, которое может содержать изображение. Первым параметром мы передаём название самого окна, а вторы его размер, флаг CV_WINDOW_AUTOSIZE, указывает на то, что окно будет таких же размеров, что и загружаемое изображение. Можно передать вторым параметром «0» (ноль) и тогда вы сможете сами изменять размер окна, когда программа запущена.

    cvShowImage( "Example1", img );
    Непосредственно отображает изображение в окне, название которого мы передаём первым параметром, второй параметр передаёт само изображение.

    cvWaitKey(0);
    Данная функция останавливает программу и ожидает нажатия клавиши, если аргумент функции больше нуля, тогда программа ожидает это число миллисекунд и продолжает программу, если ничего не нажато. Если же аргумент равен нулю или меньше, тогда программа будет ожидать нажатия клавиши и потом продолжит работу.

    cvReleaseImage( &img );
    Функция освобождает память, связанную с изображением и затем устанавливает указатель img в NULL.

    cvDestroyWindow( "Example1" );
    В конце мы закрываем окно и высвобождаем выделенную память. В простых программах последние два действия не являются обязательным, так как ОС сама всё сделает, после закрытия программы. Но не стоит всегда на неё полагаться, и для подстраховки лучше делать всё самому. :)

    Спасибо за внимание.
    Это мой первый пост здесь, надеюсь, что он многим понравится. ;)
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 24

      +3
      Слегка оффтопом. Для любителей .net есть обалденная библиотека с серьезным функционалом — компьютерное зрение, захвати процессинг потоков видео, работа с изображениями, нейронные сети — AForge.NET (http://www.aforgenet.com/). Хотел написать про нее статью, но там в хелпе и так все отлично прописано.
        0
        Спасибо, как раз хотел спросить про что-нибудь на .NET
        +1
        Русскоязычный MSVC?!
        Ужас.
          –1
          А что в этом страшного? :) На вкус и цыет фломастеры разные. :)
            0
            Фотошоп, MSVC, 3DMax должны быть на английском. В будущем пригождается.
              –1
              Не, фотошоп и 3D Max — безусловно, я тоже считаю, что должны быть на английском, потому что там специфичные термины. А в MSVS ничего такого нет и свободно можно переводить интерфейс туда<->обратно
                +3
                Не, серьезно, вы легко можете понять что «файл определения модуля» с предпоследнего скиншота это def-файл?

                Я лично только по расположению менюшек догадался.
                  –1
                  Затрудняюсь ответить, но мне кажется, что это не так заумно написано, как я видел раньше в 3D Max'e :)
            –1
            А не подскажет никто, как на английский язык переключить? А то попался вижак такой, с диска «Хакера», теперь страдаю(
              –1
              скачать английскую версию
                –1
                Ну это да)) я думал чето типа локализаторов есть)
                  –1
                  У меня на днях после установки клиентских компонентов оракла половина студии вдруг стала русской. Локализатор, мать его… :(
                –1
                Сервис->Параметры->Среда->Выбор языка (это в Express)
                  –1
                  Там только два пункта — «Русский» и «Такой же, как в Microsoft Windows» )
              +2
              >Лучше скачайте версию 1.0 — эта версия создавалась ещё в Intel.
              Учитывая, что уже есть версия 2.0 описываемой библиотеки, эта рекомендация автора немного непонятна. Не могли бы вы ещё больше конкретизировать?

              Вы не пользовались вспомогательной литературой, когда текст писали, «Learning OpenCV», например.
                0
                В последнем предложении вопросительный знак забыл.
                  0
                  Если я не ошибаюсь, то сейчас Intel не занимается разработкой этой библиотеки.
                  Пользовался, именно по книге «Learning OpenCV» я и изучаю OpenCV
                  0
                  С помощью этой штуки анализировали картинку с веб-камеры. И при появлении в кадре человека, используя нечеткую логику, выводили «опасное» он совершает действие или нет =)
                    0
                    Давно скачал эту библиотеку, только не собирался временем для работы с ней. Спасибо огроменнейшее за статью. Она будет моим первым учебником по библиотеке. Благодарю!
                      0
                      Хм, после статьи про робота и эту товарищ становится, внезапно, моим кумиром.
                      +3
                      Кстати, вот здесь:
                      www.computer-vision-software.com/blog/
                      можно посмотреть на то, что можно сделать с помощью OpenCV. Много интересного показывают.
                      +2
                      Ктонибудь знает нормальный порт OpenCV на CUDA?
                      Нашел только GPUCV, но собрать его так и не удалось :(
                        0
                        а есть сайт с примерами проектов на opencv? Не видео, а сурсы.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое