roboforum.ru

Технический форум по робототехнике.
Текущее время: 06 май 2025, 21:13

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 75 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 14:24 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июл 2006, 20:42
Сообщения: 650
Откуда: Москва
прог. языки: C/C++, Python
Я сечас изучаю OpenCV по книге Learning OpenCV. И начал переводить уроки из этой книги в своём ЖЖ. Пока описал установку пакета в Visual Studio и перевёл первый урок. Может будет интересно публкация уроков здесь и в нашей Wiki? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 14:31 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
Думаю, будет :)

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 14:31 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Безусловно! Будем очень даже рады! К тому же тогда желающие смогут дописывать сюда блоки про использование OpenCV в других средах разработки, например, C++ Builder, Qt Creator и т.д.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 14:40 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июл 2006, 20:42
Сообщения: 650
Откуда: Москва
прог. языки: C/C++, Python
Вот тогда предлагаю к прочтению.:)
Установка.

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

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

3. Теперь у вас установлено всё необходимое, поэтому приступим к включению OpenCV в MSVS 2008:
- В главном меню, выберите Tools->Options (Сервис->Параметры).
- В списке справа, выберите Projects and Solutions->VC++ Directories (Проекты и решения->Каталоги VC++)
- Сначала, из "Show Directories for:" ("Показать каталоги для:") листбокса выберите "Include Files" ("Включаемые файлы").
- Кликните на иконке Insert New (Вставить строку)
Вложение:
newicon.png
newicon.png [ 496 байт | Просмотров: 26170 ]
и добавляйте следующие строки:
"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"
Результат можете увидеть на скриншоте.
Вложение:
1.png
1.png [ 98.09 КиБ | Просмотров: 16430 ]


- Далее выберите в листбоксе "Library files" ("Файлы библиотек") и добавьте
следующие строки:
"C:\Program Files\OpenCV\lib"
"C:\Program Files\OpenCV\otherlibs\_graphics\lib"
Вложение:
2.png
2.png [ 92.88 КиБ | Просмотров: 16365 ]


- Затем, в том же листбоксе выберите "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"
Вложение:
3.png
3.png [ 91.73 КиБ | Просмотров: 16370 ]


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

- В MSVS выберите File->Create->Project (Файл->Создать->Проект) и создайте консольное приложение в VC++
Вложение:
4.png
4.png [ 49.55 КиБ | Просмотров: 16362 ]


- В открытом проекте выберите: Project->Properties (Проект->Свойства).
- Далее Configuration Properties->Linker->Input
- И добавляйте имена библиотек в поле "Additional Dependencies" (Дополнительные зависимости): cxcore.lib cv.lib highgui.lib cvaux.lib cvcam.lib
Вложение:
5.png
5.png [ 54.88 КиБ | Просмотров: 16367 ]


Запомните, что при переходе из режима Debug в Release вам потребуется заново добавлять библиотеки в "Дополнительные зависимости"! Я всегда буду писать проекты в режиме 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" );
}


Эту программу нужно запустить из командной строки, передав ей в качестве первого параметра путь к изображению.
Вложение:
6.png
6.png [ 156.81 КиБ | Просмотров: 16409 ]


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

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

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

Код:
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" );

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 16:33 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
2Lockdog: Такие мысли есть:
1. Надо отделить разбор кроссплатформенной программы OpenCV от конкретной среды разработки Visual Studio и особенностей работы под ней. Тогда к вам смогут присоединиться все кто ведут разработку в других средах. И информация ваша будет более популярна.
2. Visual Studio выбрана по каким-то причинам или таковых пока нету? Я просто пока смотрю на Qt Creator - бесплатный для "не коммерции" и кроссплатформенный реально.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 16:54 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июл 2006, 20:42
Сообщения: 650
Откуда: Москва
прог. языки: C/C++, Python
Я описал только установку самих библиотек на VS, а листинги программ ничем отличаться в других средах не будут. Выбрана по причинам, что я её постоянно использую.:) У меня так же установлена бесплатная среда Dev-C++ - в ближайшее время опишу установку OpenCV под неё. Опять же напоминаю, что листинги в уроках отличаться нигде не будут, потому что C++ на всех платформах один и тот же. Я не смогу описать установку на всех средах программирования. :) VS вроде как довольно популярная, а Dev-C++ виндовая среда для линуксового gcc.))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 18:40 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Я к тому, что я не предлагаю описывать установку во всех средах программирования, просто концепцию в которой отделены среда разработки и примеры - если так и есть, то это просто отлично! ;)

Добавлено спустя 50 секунд:
А какой интерфейс пользовательских приложений планируется использовать? Тот, который из OpenCV?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 18:58 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июл 2006, 20:42
Сообщения: 650
Откуда: Москва
прог. языки: C/C++, Python
Цитата:
отделены среда разработки и примеры - если так и есть, то это просто отлично!

Так и есть)))

Цитата:
А какой интерфейс пользовательских приложений планируется использовать? Тот, который из OpenCV?

Имеется ввиду кнопки, трекбары и прочее? Если про это, то из OpenCV


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 18:59 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Ок, понял, тогда всячески поддерживаем затею! Думаю даже поучаствую, как только тут разгребусь с уже начатыми делами :)

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 19:49 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
Очень интересно было бы почитать как уже непосредственно писать...
А установка это имхо тривиально. sudo apt-get install opencv

_________________
Linux user | Firefox user


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 19:55 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
а давайте распознаем яркую точку на изображении :wink:

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 20:01 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
2MiBBiM: Дык я же писал: viewtopic.php?p=83752#p83752

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 20:31 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
=DeaD=, три комментария новичку о многом скажут :) не, я хочу чтоб на блюдечке все было :wink: с обзором базовых типов, классов, и проч.

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 12 авг 2009, 20:46 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июл 2006, 20:42
Сообщения: 650
Откуда: Москва
прог. языки: C/C++, Python
Будет, но всё по порядку)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Уроки по OpenCV
СообщениеДобавлено: 13 авг 2009, 19:43 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июл 2006, 20:42
Сообщения: 650
Откуда: Москва
прог. языки: C/C++, Python
Ещё один урок:

Сегодня я вам покажу как вывести видео в нашем приложении при помощи OpenCV. Это так же легко, как и работа с изображением. Помимо прошлых действий нам потребуется сделать цикл, для чтения каждого кадра видео, так же нам потребуется команда, по который мы сможем выйти из этого цикла, если видео покажется слишком скучным.=)
Приступим!

Код:
#include “highgui.h”

int main( int argc, char** argv )
{
cvNamedWindow( “AVI Video”, CV_WINDOW_AUTOSIZE );
CvCapture* capture = cvCreateFileCapture( argv[1] );
IplImage* frame;
while(1)
{
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( “AVI Video”, frame );
char c = cvWaitKey(33);
if( c == 27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( “AVI Video” );
}


Результат работы программы (кадр из фильма "Трансформеры").
Вложение:
1.png
1.png [ 228.86 КиБ | Просмотров: 16193 ]


Функции которые мы рассматривли в прошлом уроке, в этом описываться не будут.

CvCapture* capture = cvCreateFileCapture( argv[1] );
Данная функция принимает в качестве аргумента параметр в котором мы передаём путь считываемого AVI файла и возвращает указатель на структуру CvCapture. Эта структура хранит всю информацию о AVI файле.

frame = cvQueryFrame( capture );
Внутри цикла while(1) мы начинаем считывание AVI файла. cvQueryFrame() принмает в качестве аргумента указатель на структуру CvCapture. И затем с каждым циклом заносит в память следующий кадр видео. Указатель возвращается на этот кадр.

char c = cvWaitKey(33);
if( c == 27 ) break;
Когда мы отобразили очередной кадр, то мы ждём 33 миллисекунды (на самом деле вы можете поставить какую угодно задержку, но данная считается оптимальной для отображения 30 кадров в секунду, а 3 миллисекунды примите пока на веру:)) перед выводом следующего кадра. Если пользователь нажимает клавишу на клавиатуре, то функция cvWaitKey() передаёт переменной "с" ASCII код этой клавиши и если пользователь нажал Esc (ASCII 27), то тогда мы выходим из цикла, иначе проходит 33 мс и цикл продолжается.

cvReleaseCapture( &capture );
Так или иначе - цикл преравался (видео закончилось или была нажата клавиша Esc), тогда этой функцией мы высвобождаем память связанную со структурой CvCapture.
Вот и всё! Немного позже я расскажу о том, как добавить в наше приложение slidebar, чтобы можно было перематывать видео!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 75 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO