Первая программа на OpenCV

Материал из roboforum.ru Wiki
Версия от 08:25, 16 августа 2009; Lockdog (обсуждение | вклад) (Новая страница: «В первой программе мы научимся создавать окно, выводить изображение, ожидать нажатия клав…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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

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

Вот листинг нашей первой программы: <source lang="C">

  1. 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" ); } </source>

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

Work.png

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

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

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

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

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

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

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

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

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

На этом наш первый урок окончен. Вы можете поиграться с этой программой, установить разные флаги на размеры окна, создать несколько окон и загружать в них разные изображения. А в следующий раз я расскажу, как загрузить и вывести на экран видео-изображение. Если возникнут вопросы, то обращайтесь сюда: Вопросы по OpenCV. Удачи! ;)