Первая программа на OpenCV
В первой программе мы научимся создавать окно, выводить изображение, ожидать нажатия клавиши клавиатуры и закрывать приложение.
OpenCV предоставляет возможности по работе с широким набором типов изображений, а также видео и видео-потоками с камер. Эти возможности являются частью библиотеки HighGUI, которая включена в пакет OpenCV.
Вот листинг нашей первой программы: <source lang="C">
- 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>
Эту программу нужно запустить из командной строки, передав ей в качестве первого параметра путь к изображению.
В качестве изображения для загрузки я выбрал скрин с первой программы.
Рассмотрим принцип работы. При запуске, программа загружает в память изображение, переданное, первым агрументом и выводит его на экран, затем ожидает нажатия любой клавиши и после нажатия закрывается.
Теперь рассмотрим каждую команду в отдельности.
<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. Удачи! ;)