В файле *.pro вашего проекта добавьте строчки:
OPENCVDIR = C:/Develop/opencv22
exists($$OPENCVDIR) {
DEFINES += USEOPENCV
INCLUDEPATH += $${OPENCVDIR}/include
LIBS += -L$${OPENCVDIR}/lib \
-lopencv_core220.dll \
-lopencv_imgproc220.dll \
-lopencv_highgui220.dll
DEPENDPATH += $${OPENCVDIR}/bin
message("OpenCV libraries found in $${OPENCVDIR}")
}
else:message("OpenCV libraries not found.")
Для подключения других модулей - надо только дописать их названия в LIBS.
Тогда в любом файле просто подключаем требуемые модули:
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
И все работает.
Данный блог - мои замечания касающиеся тем технического зрения. В данном блоге я буду выкладывать свои находки, инструкции и что у меня получилось.
понедельник, 27 декабря 2010 г.
Сборка OpenCV2.2 MinGW/Windows XP
1. Скачать новую версию MinGW
2. При сборке конфигурационных файлов с помощью утилиты cmake2.8 нужно в момент Configure выбрать пункт Specify Native Compilers указать компиляторы для C - gcc/ для C++ - g++
3. Запускаем в папке куда собрались конфигурационные файлы утилиту mingw32-make (она должна быть в пути) если нет смотрите мое предыдущее сообщение.
4. После того как собрали (примерно час времени) выполните команду mingw32-make install для создания прекомпилированных заголовков (хэдеров).
Все готово можно приступать к работе
2. При сборке конфигурационных файлов с помощью утилиты cmake2.8 нужно в момент Configure выбрать пункт Specify Native Compilers указать компиляторы для C - gcc/ для C++ - g++
3. Запускаем в папке куда собрались конфигурационные файлы утилиту mingw32-make (она должна быть в пути) если нет смотрите мое предыдущее сообщение.
4. После того как собрали (примерно час времени) выполните команду mingw32-make install для создания прекомпилированных заголовков (хэдеров).
Все готово можно приступать к работе
воскресенье, 19 декабря 2010 г.
Новые технологии
Заинтересовался технологиями
http://www.willowgarage.com/pages/software/ros-platform
Операционная система специально для роботов. Чем она отличается от обычных Linux дистрибутивов? Все несколькими вещами: абстрактными интерфейсами устройств, сообщениями между процессами, доступ к низкоуровневым функциям. Интересно что у Androidа есть аналогичные функции и он тоже в исходных кодах. Может ROS более производительна т.к. не требуется рисования красивых картинок? Я думаю разобраться. Этим проектом заведует компания разработчиков, которой я лично фанат т.к. они разработали OpenCV.
Про OpenNI
http://www.openni.org/
Израильская компания PrimeSence разработала игрушку, которая легла в основу Microsoft Kinect.
Этот проект - это открытые коды для драйверов для Kinect. Штука сочетает в себе камеру и измеритель расстояния. Интересно было бы ее вставить например в машину, но проблемы будут при 2х машинах с такими устройствами))).
- ROS - операционная система для роботов.
- OpenNI - библиотека для изучения кинематики людей.
http://www.willowgarage.com/pages/software/ros-platform
Операционная система специально для роботов. Чем она отличается от обычных Linux дистрибутивов? Все несколькими вещами: абстрактными интерфейсами устройств, сообщениями между процессами, доступ к низкоуровневым функциям. Интересно что у Androidа есть аналогичные функции и он тоже в исходных кодах. Может ROS более производительна т.к. не требуется рисования красивых картинок? Я думаю разобраться. Этим проектом заведует компания разработчиков, которой я лично фанат т.к. они разработали OpenCV.
Про OpenNI
http://www.openni.org/
Израильская компания PrimeSence разработала игрушку, которая легла в основу Microsoft Kinect.
Этот проект - это открытые коды для драйверов для Kinect. Штука сочетает в себе камеру и измеритель расстояния. Интересно было бы ее вставить например в машину, но проблемы будут при 2х машинах с такими устройствами))).
понедельник, 22 ноября 2010 г.
Сборка opencv из репозитория под Windows
Данная статья о том, как собрать opencv из исходных кодов из репозитория. Почему это важно, ведь всегда есть версия для установки под Windows? Потому, что в репозитории больше интересных примеров и более надежный код, чем в релизе.
Шаг 1) Установка утилит
1.1. SVN клиент http://tortoisesvn.tigris.org/
1.2. Cmake http://www.cmake.org/cmake/resources/software.html
1.3. MinGW http://www.mingw.org/wiki/InstallationHOWTOforMinGW
Шаг 2) Конфигурация системы
Шаг 1) Установка утилит
1.1. SVN клиент http://tortoisesvn.tigris.org/
1.2. Cmake http://www.cmake.org/cmake/resources/software.html
1.3. MinGW http://www.mingw.org/wiki/InstallationHOWTOforMinGW
Шаг 2) Конфигурация системы
Мой компьютер> Свойства> Дополнительные параметры системы> Закладка дополнительно> Переменные среды
Добавим переменную PATH со значением ПУТЬ ДО ПАПКИ MinGW
Перезагружаем систему
Шаг 3) Проверяем работу mingw запускаем консоль и выполняем mingw32-make
Шаг 4) Загружаем репозиторий в ВАШ ПУТЬ через SVN с тестовыми данными https://code.ros.org/svn/opencv/trunk ~ 600 Мб, либо без тестовых данных https://code.ros.org/svn/opencv/trunk/opencv ~ 175Мб.
Ждем...
Шаг 5) Запускаем cmake
В строке Where is the source code набираем ВАШ ПУТЬ в случае если вы загрузили с тестовыми данными ВАШ ПУТЬ/opencv
В строке Where to build binaries указываем куда класть данные проектов (далее buildPath).
Конфигурируем под Ваш компилятор либо VS (Visual Studio) либо MinGW кнопкой Configure.
Для компиляции примеров поставьте галочку BUILD_EXAMPLES
Примечание: возможна придется нажать Configure несколько раз.
Шаг 6) Нажимаем Generate в buildPath будут сконфигурированные проекты.
Шаг 7 mingw) Заходим в buildPath через командную строку cmd и исполняем mingw32-make
Собирается на компьютере Intel Dual Core 2.9 Hz ~ 30 минут
Шаг 7 VS) Заходим в buildPath через проводник находим файл Solution (sl) запускаем его и собираем в VS.
Вот и все opencv собран можно указывать на него путь. Удачной работы!
Вот и все opencv собран можно указывать на него путь. Удачной работы!
суббота, 13 ноября 2010 г.
Работа с изображениями (начало начал)
В данном сообщении даются базовые навыки работы с bmp.
План статьи:
Это самый простой формат, с него надо начинать работать
Файл состоит из следующих частей:
BITMAPFILEHEADER - важное поле
BITMAPINFOHEADER - информация о изображение важные поля:
biBitCount, biWidth, biHeight - ЭТИХ ПАРАМЕТРОВ ДОСТАТОЧНО ЧТОБЫ ОТКРЫТЬ СТАНДАРТНЫЙ ФАЙЛ 24BIT
Палитра - для 8 битных раскрашиваемых изображений (в принципе сейчас не используется)
Само изображение
ВАЖНО!!! Изображение больше чем biWidth*biHeight, по историческим причинам biWidth реальный должен делиться на 4, по это realWidth = biWidth+biWidth%4
Код позаимствовал с http://www.vbforums.com/showthread.php?t=261522 структуры BITMAPFILEHEADER и BITMAPFILEHEADER если надо можно позаимствовать по же этому адресу. Примечание для GNU программистов WORD - 16 бита (int) DWORD и LONG - 32 бита (long)
//Данная функция открывает bmp файл (на выходе имеем указатель на данные + заполненную структуру bitmapInfoHeader)
В данном примере мы предпологаем что открываем BMP стандартое 3 канала 8 бит каждый канал.
так как "чистые" bmp - файлы в наше время экзотике в основном приходится работать с JPEG, PNG (интернет) или TIFF (медицина, наука), то данный пример просто для общего развития. Перечисленные форматы имеют намного более сложную структуру и данные сжаты алгоритмами, по этому они не открываются простым "способом".
В следующем сообщение я распишу как упростить данную процедуру с помощью готовых библиотек и открывать другие типы файлов.
План статьи:
- BMP и представление изображения в памяти.
- Как явно открыть BMP
Это самый простой формат, с него надо начинать работать
Файл состоит из следующих частей:
BITMAPFILEHEADER - важное поле
BITMAPINFOHEADER - информация о изображение важные поля:
biBitCount, biWidth, biHeight - ЭТИХ ПАРАМЕТРОВ ДОСТАТОЧНО ЧТОБЫ ОТКРЫТЬ СТАНДАРТНЫЙ ФАЙЛ 24BIT
Палитра - для 8 битных раскрашиваемых изображений (в принципе сейчас не используется)
Само изображение
ВАЖНО!!! Изображение больше чем biWidth*biHeight, по историческим причинам biWidth реальный должен делиться на 4, по это realWidth = biWidth+biWidth%4
Код позаимствовал с http://www.vbforums.com/showthread.php?t=261522 структуры BITMAPFILEHEADER и BITMAPFILEHEADER если надо можно позаимствовать по же этому адресу. Примечание для GNU программистов WORD - 16 бита (int) DWORD и LONG - 32 бита (long)
//Данная функция открывает bmp файл (на выходе имеем указатель на данные + заполненную структуру bitmapInfoHeader)
unsigned char * openBMP(char* filename, BITMAPINFOHEADER *bitmapInfoHeader) { FILE *filePtr; //указатель на файл BITMAPFILEHEADER bitmapFileHeader; //информация о файле unsigned char *bitmapImage; //указатель на данные в которые будем писать изображение //открываем файл filePtr = fopen(filename,"rb"); if (NULL == filePtr) { return NULL; } //считываем структуру BITMAPFILEHEADER fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER,1,filePtr); //читаем заголовок изображения fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER),1,filePtr); //перемещаем указать в файле на начало данных изображения fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET); //Далее нам нужно запросить память под изображение // (в стандарте для не сжатого BMP bitmapInfoHeader->biSizeImage может равняться 0) long imsize = 0; long w = bitmapInfoHeader->biWidth; long wstep = w+w%4; long h = bitmapInfoHeader->biHeight; if(0!=bitmapInfoHeader->biSizeImage) { imsize = bitmapInfoHeader->biSizeImage; }else{ imsize = wstep * h; } bitmapImage = (unsigned char*)malloc(imsize); //читаем изображение fread(bitmapImage,imsize,filePtr); //Закрываем изображение fclose(filePtr); return bitmapImage; }
В данном примере мы предпологаем что открываем BMP стандартое 3 канала 8 бит каждый канал.
так как "чистые" bmp - файлы в наше время экзотике в основном приходится работать с JPEG, PNG (интернет) или TIFF (медицина, наука), то данный пример просто для общего развития. Перечисленные форматы имеют намного более сложную структуру и данные сжаты алгоритмами, по этому они не открываются простым "способом".
В следующем сообщение я распишу как упростить данную процедуру с помощью готовых библиотек и открывать другие типы файлов.
пятница, 5 ноября 2010 г.
Компиляция opencv под андроид
На днях наткнулся на интересную статью в которой разработчики перенесли возможности библиотеки opencv в телефон на основе операционной системы Android http://code.google.com/p/android-opencv/wiki/CVCamera. Особенность этого проекта в том, что у авторов получилось создать готовое приложение, на которое можно посмотреть.
Я решил повторить данный эксперимент и собственно что получилось.
Далее я опишу детально как надо собрать opencv под android.
Логическое отступление. Android - это Java подобная оболочка на ядре Linux. Для того чтобы использовать все функции opencv (которая написана на C++), нам во первых собрать ее под Linuxом или эмулятором Linuxа с использованием инструментов, которые нам предоставил Гугл.
Собирать мы будем ее в динамические библиотеки (*.so) и будем использовать через враперы JNI. (Java Native Interface).
Шаг 0. Необходимый инструментарий.
Если Вы работаете под Linux то вам не нужно будет устанавливать Cygwin.
0.1. Загружаем эмулятор линукса Cygwin (http://www.cygwin.com/)
0.2. Выбираем путь установки у меня он будет C:/Develop/cygwin
Во время установки он спросит какие компоненты нам будут нужны:
make - сборщик
cmake - сборщик
g++ - компилятор для c++
gcc - компилятор для c
swig - инструмент для создания интерфейсов
Если сразу компоненты не установились запустите установщик еще раз он будет дополнять программы.
0.3. Нам надо загрузить android-ndk. Обычный нам не будет подходить т.к. обычный с сайта Гугл не умеет компилировать с++. По этому нам необходимо загрузить http://crystax.net/android/ndk-r4.php. Загружаем на компьютер и распаковываем в каталог: C:/Develop/cygwin/home/username, где username - имя вашего пользователя у меня SibAS.
Нам необходимо добавить данный каталог к системному пути:
для этого
Мой компьютер> Свойства> Дополнительные параметры системы> Закладка дополнительно> Переменные среды
Добавим переменную PATH со значением C:\Develop\cygwin\home\SibAS\android-ndk-r4-crystax;C:\Develop\cygwin\bin;
Шаг 1. Запускаем Cygwin и проверяем как все ли работает.
cd android-ndk-r4-crystax
cd samples
cd hello-jni
ndk-build
Экран того что мы должны увидеть.
Если возникли ошибки они могут быть из-за путей (проверьте PATH) наберите в echo $PATH если все пути совпадают то ошибке в конфигурации cygwin - он напишет каких приложений не хватает и вы сможете их загрузить.
Отлично! Мы смогли собрать тестовое приложение!
Теперь очередь за opencv.
Шаг 2. Нам надо загрузить исходный код проекта. С репозитория http://android-opencv.googlecode.com/svn/trunk/. Воспользуемся svn клиентом http://tortoisesvn.tigris.org/ для загрузки репозитория (с помощью удобного интерфейса) в папку C:/Develop/cygwin/home.
Отлично теперь в папке C:/Develop/cygwin/home лежат следующие папки: android-ndk-r4-crystax opencv samples (последнее две из проекта)
В Cygwin переходим в папку opencv
cd opencv
и запускаем сборку...
sh build.sh
Собираться все это добро будет порядка часа так что можно посмотреть фильм или почитать книжку. Когда все готово мы увидим следующий экран:
OpenCV собрано!
Шаг 3. Собираем пример
cd samples (которые мы загрузили с проектом а не с android-ndk)
cd CVCamera
sh build.sh
Проект собран в следующем сообщении будет описано как запустить его из eclipse
Подписаться на:
Сообщения (Atom)