Pull to refresh

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

Reading time4 min
Views13K
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" );
В конце мы закрываем окно и высвобождаем выделенную память. В простых программах последние два действия не являются обязательным, так как ОС сама всё сделает, после закрытия программы. Но не стоит всегда на неё полагаться, и для подстраховки лучше делать всё самому. :)

Спасибо за внимание.
Это мой первый пост здесь, надеюсь, что он многим понравится. ;)
Tags:
Hubs:
+21
Comments24

Articles