вторник, 6 декабря 2011 г.

Лекции по обработке изображений

Заканчиваю читать краткий курс лекций по цифровой обработке изображений и компьютерному зрению в целом.

Слайды частично заимствованны у Антона Конушина из МГУ.

Может - кому нибудь поможет.

четверг, 15 сентября 2011 г.

PCL под MinGW

Пришлось помучится, но получилось собрать PCL под mingw!

Теперь исследования по обработке 3Д изображений пойдут вперед.

Итак, все по шагам.

1) Загружаем исходники PCL

2) Исходники Boost >= 1.46
Собирается запуском скрипта bootstrap, затем через командную строку надо зайти в директорию с бустом и набрать .\b2 toolset=gcc. Это сработает только в том случае, если MinGW в вашем пути!

3) Eigen 3.0.0

4) CMINPACK version >= 1.1.3
Здесь потребуется фортран для Mingw. Если его по умолчанию нет то можно загрузить с помощью утилиты mingw-get, командой mingw-get install fortran
Сконфигурированным в CMake а затем заходим в директорию командной строкой набиваем mingw32-make install

5) FLANN version >= 1.6.8
Чтобы собрать, видимо придется закоментить упоминание va_list в файлах logger.h и logger.cpp
Сконфигурированным в CMake а затем заходим в директорию командной строкой набиваем mingw32-make install

6) QHULL version >= 2011.1
Сконфигурированным в CMake а затем заходим в директорию командной строкой набиваем mingw32-make install

7) Далее приходится настраивать проект прописываем пути до собранных библиотек
Самое важное записать в поле Boost_LIB_DIAGNOSTIC_DEFINITIONS
-DBOOST_LIB_DIAGNOSTIC -DBOOST_THREAD_USE_LIB

Конфигурируем и генерируем файлы сборки и начинаем собирать! Всем удачи!

суббота, 23 июля 2011 г.

VLfeat

Недавно наткнулся на интересную библиотеку технического зрения VLfeat.
Данная библиотека активно разрабатывается научным сотрудником из Оксфорда Andrea Vedaldi и Brian Fulkerson, на ход данной работы сильно повлиял их соавтор довольно известный ученый Andrew Zisserman.

Библиотека открытая, кросс платформенная собирается под VS2008,MinGW. Не имеет внешних зависимостей.

Имеются два API: MATLAB и C.

Функционал довольно банален, но хорошо написанные примеры и совместимость с MATLAB делает из данной библиотеки хороший инструмент для прототипированния алгоритмов технического зрения, которые затем можно либо перенести на C++ с использованием данной библиотеки или OpenCV.

Теперь о функциональности библиотеки:
1. Нахождение инвариантных точек на изображении (SIFT,MSER,PHOW(SIFT на пирамиде изображений))
2. Кластеризация и поиск ближайшего соседа (K-means, kd-tree)
3. Алгоритмы машинного обучение (на самом деле реализован только SVM и функция для изменения ядра), но его вполне хватает.

При этом даны довольно интересные примеры:
1. Поиск гомографии
2. И индексация изображений

среда, 22 июня 2011 г.

Вышла OpenCV 2.3.0r

Что нового:
+ Встроенная поддержка videoInput (теперь при сборке под Windows можно использовать ieee1934 камеры)
+ Раздельная документация для C, C++ и Python
+ Примеры работы под Android
+ Новый шаблон для калибровки камеры
+ Поддержка OpenNI для работы с сенсором kinect прямо из OpenCV

- Неисправный инсталлятор для VS2008 (приходится собирать вручную)

Полный список

пятница, 3 июня 2011 г.

Преобразование cv::Mat в QImage

Очень удобно при разработке приложений по техническому зрению с графическем интерфейсом использовать OpenCV и Qt.

Но у некоторых людей возникают проблемы конвертировать изображения cv::Mat в QImage.

Итак, это очень просто вот функция:

/* Параметры: image - изображение которое хотим превратить в QImage
qim - уже загруженный в память буфер под данные. Может быть равен нулю.
Возвращает новое преобразованное в QImage с копированием данных
*/
QImage* createQImage(cv::Mat image,QImage* qim)
{
    if(!image.data)
     return 0;
    cv::Mat color;
    //Если один канал у изображения
    if(1==image.channels())
    {
        //Делаем трехканальное изображение. К сожалению разработчики Qt не учли возможность
        //рисования серых изображений
        color.create(cv::Size(image.cols,image.rows),CV_8UC3);
        std::vector ls;
        ls.push_back(image);
        ls.push_back(image);
        ls.push_back(image);
        cv::merge(ls,color);
    }else{
        color = image;
    }
    QImage*  pImage=0;
    if(0==qim)
    {
        pImage = new QImage(color.cols,color.rows,QImage::Format_RGB888);
    }else{
        if((qim->width()==color.cols)&&(qim->height()==color.rows))
        {
            pImage = qim;
        }else{
            delete qim;
            pImage = new QImage(color.cols,color.rows,QImage::Format_RGB888);
        }
    }

    //
    IplImage im = (IplImage)color;
    //По неизвестным причинам pImage->bytesPerLine() и im.widthStep могут не совпадать
    if(pImage->bytesPerLine()!=im.widthStep)
    {
        //Копирование по строкам
        for(int i=0;iheight();i++)
        {
            memcpy(pImage->bits()+i*pImage->bytesPerLine(),color.data+im.widthStep*i,im.widthStep);
        }
    }else{
        //Копирование всего изображения
        memcpy(pImage->bits(),color.data,im.imageSize);
    }
    return pImage;
}

Вот и все. Надею кому-то будет полезно!

понедельник, 14 февраля 2011 г.

Настройка проекта для компиляциями под разными операционными системами

Файл .pro, создаваемый программой QtCreator содержит инструкции как собирать проект основные команды
SOURCES - исходники
HEADERS - заголовки
TEMPLATE - шаблон проекта например app или lib
INCLUDEPATH - путь к используемым заголовкам
LIBS- используемые библиотеки

Так-же имеется куча дополнительных полезныхкомманд
CONFIG - это самое общая и полезная команда для автоматической конфигурации проекта в переменную конфиг можно записать все что угодно и дальше проверять что храниться в конфиге
Например CONFIG += plugin opencv qwt
MOC_DIR - директория куда будем складывать moc файлы, созданные qmake
OBJECTS_DIR - директория куда будут сохранены объекты
DEFINES - добавляет инструкцию препроцессора
Пример  DEFINES+= USEOPENCV
далее в коде:
#ifdef USEOPENCV
 //DO SMTH
#endif

ключевые слова
win32 - сборка происходит для Windows
unix - сборка проекта для Linux
debug - сборка проекта в режиме отладки
release - сборка проекта в релиз режиме

Рассмотрим пример подключение OpenCV для Linux и Windows
OPENCVDIR = "C:/Develop/opencv-1.0.x/opencv" #Директория в которой лежит OpenCV
win32:{ #Если сборка под windows
    opencv{ #если в CONFIG мы добавили CONFIG+=opencv
    exists($$OPENCVDIR) {#Проверка существует ли директория 
            DEFINES += USEOPENCV #Добавляем define
            INCLUDEPATH += $${OPENCVDIR}/cv/include \ #Путь к заголовкам
                $${OPENCVDIR}/cxcore/include \
                $${OPENCVDIR}/otherlibs/highgui
            LIBS += -L$${OPENCVDIR}/lib \ #Путь к библиотекам
                -lcv \
                -lcxcore \
                -lhighgui      
         }
    }
}
unix:{ #В случае Linux все проще т.к. все библиотеки и заголовки обычно лежат в системных папках
opencv{
        LIBS += -lcv \
            -lcxcore \
            -lhighgui
        message("OpenCV libraries connected")  #Сообщение о том что все подключено
    }
}

Естественно такой громоздкий код не охота включать в каждый проект (особенно если проект состоит из множества частей например с плагинами)

Для этого придуманы файлы .pri
Создаете файл .pri, копируете в него настройку сборки и подключаете к pro файлу коммандой
include
Пример:
include(EthoStudioSDK/ethostudioconfig.pri )

Вроде все. Удачи!

четверг, 10 февраля 2011 г.

Kinect Player

 A Cross Platform Application for recording/viewing 3d data from kinect sencor.


Source are avalable at http://code.google.com/p/kinect-player

Binaries form Win32 http://kinect-player.googlecode.com/files/kinect-player.zip


Чтобы собрать проект потребуется Qt 4.7.1, Qt Creator, OpenCV2.2 и Libfreenect (Все должны быть собраны одной версией MinGW)  сборка под Linux не должна вызвать проблем.
Программа позволяет записывать и просматривать 3д данные с сенсора Кинект. Вращать камеру вокруг сцены и т.д.
Рабочее окно программы

Тоже окно под другой перспективой



Иконка кинекта взята у
http://www.michaelcritz.com/2011/01/28/kinect-icon/

вторник, 8 февраля 2011 г.

Преобразование картинки из Libfreenect в cv::Mat

Решил написать маленькую заметку по поводу использования libfreenect и ее варпера для c freenect_sync

Mat frame;
frame.create(cv::Size(640,480),CV_8UC3);
Mat depth;
depth.create(cv::Size(640,480),CV_16UC1);
uint32_t ts;
char *rgb = 0;
short *depths=0;
freenect_sync_get_video((void**)&rgb,&ts,0,FREENECT_VIDEO_RGB);
freenect_sync_get_depth((void**)&depths, &ts, 0, FREENECT_DEPTH_11BIT);
memcpy(frame.data,rgb,FREENECT_VIDEO_RGB_SIZE);
memcpy(depth.data,depths,FREENECT_DEPTH_11BIT_SIZE);

понедельник, 7 февраля 2011 г.

Компрессор для Kinect данных

Задача: сохранить цветное изображение RGB (24 бита на пиксель) + глубинное изображение 16 бит на пиксель. Изображения сохраняются в файл (глубинное изображение - без потерь PNG компрессором), цветное с потерями JPEG компрессором.

Для решения использовались функции из библиотеки OpenCV 2.2.

Полный исходный код проекта доступен по ссылке.

воскресенье, 23 января 2011 г.

Текущие работы

Решил написать о том какие проекты сейчас идут в лаборатории цифровой обработки изображений ИАиЭ СО РАН.

EthoStudio - система для автоматизации этологических экспериментов. Применяется для изучения эффектов различных препаратов на животных. Интерфейс разработан на Qt, содержание использует OpenCVи другие бесплатные открытые библиотеки.
Сайт проекта временно находится в разработке www.ethostudio.com
Применяется в: ИЦиГ СО РАН, ЛИН СО РАН, институте физиологии им. Павлова РАН.
Скриншот программы EthoStudio




XScan - программное обеспечение для системы для досмотра пассажиров в аэропорта. Позволяет захватывать изображения с аппарата СибСкан (разработанном в ИЯФе), обрабатывать их, представлять оператору и сохранять в БД или жесткий диск.
Применяется в: Толмачева, Домодедово, Ханты-Мансийском аэропорту, саудовской аравии и т.д.
Скриншот программы XScan

 Есть еще несколько проектов в стадии зачатков... Но по всем проектам есть интересная работа.

вторник, 11 января 2011 г.

Сборка libfreenect с помощью MinGW под Windows Vista

1. Релиз библиотеки libfreenect с git репозитория

2. Загружаем зависимости
2.1. Библиотеку работы с USB (libusb) [прямая ссыла]
2.2. Библиотеку для работы с потоками (pthreads) [прямая ссыла]
2.3. Библиотеку для отображения 3Д glut32 (расширение OpenGL) [прямая ссылка]

Распаковываем файлы

Glut32 распаковываем и добавляем в MinGW
glut.h в директорию {MinGW}/include/GL
glut32.lib и glut32.dll в директорию {MinGW}/lib

{MinGW}  - директория где установлена MinGW (Например C:/MinGW)

Запускаем CMake
Выбираем директорию в которую распаковали libfreenect и директорию куда будем собирать проект.

Нажимаем Configure (вбираем MinGW, компиляторы gcc и g++) - он выдаст много ошибок.
Поставьте галочку Andvanced в верхней части настроек MinGW.
Устанавливаем значение переменных
GLUT_INCLUDE_DIR - {MinGW}/include/GL
GLUT_glut_LIBRARY - {MinGW}/lib/glut32.dll
LIBUSB_1_INCLUDE_DIR - {libusb-win32-bin-1.2.2.0}\include
LIBUSB_1_LIBRARY - {libusb-win32-bin-1.2.2.0}\lib\gcc\libusb.a
THREAD _PTHREAD_INCLUDE_DIR - {PThreads}/Pre-built.2/include
THREAD_PTHREAD_WIN32_LIBRARY - {PThreads}/Pre-built.2/lib/libpthreadGC2.a

отключаем опцию BUILD_FAKENECT (с ней проект почему-то не собирается)

Далее жмем Configure. Если все хорошо жмем Generate.

Перед компиляцией надо устранить одни глюк: в MinGW/include/sys/types.h есть строка
typedef _ssize_t ssize_t; - ее надо закоментить.
Заходим с командной строки в директорию которую выбрали в CMake и запускаем mingw32-make
Ждем...
Ура все получилось.
Чтобы запустить пример из bin необходимо скопировать в эту папку целый букет dll.

glut32.dll
libfreenect.dll
libusb0.dll   (примечание исходное название библиотеки libusb0_x86.dll)
pthreadGC2.dll

Наслаждайтесь!
3D изображение сцены

Глубинное изображение и цветное

воскресенье, 9 января 2011 г.

Джентельменский набор библиотек и технологий

Библиотеки для систем основанных на техническом зрении
OpenCV - библиотека алгоритмов компьютерного зрения
Qt - библиотека пользовательского интерфейса
MRPT - программный набор компонент для робототехники
ROS - надстройка над операционной системой для робототехники
Itk  - инструменты для работы с медицинскими изображениями
FreeImage - загрузка и выгрузка изображений

Полезные библиотеки
Boost - Библиотека шаблонов для C++
IrrLicht - библиотека для 3Д рисования
OpenCL - ускорение и распараллеливание вычислений на GPU

понедельник, 27 декабря 2010 г.

Подключение Opencv2.2 в Qt Creator

В файле *.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>

И все работает.

Сборка 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 для создания прекомпилированных заголовков (хэдеров).

Все готово можно приступать к работе

воскресенье, 19 декабря 2010 г.

Новые технологии

Заинтересовался технологиями

  1. ROS - операционная система для роботов.
  2. OpenNI - библиотека для изучения кинематики людей.
Итак подробнее ROS
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) Конфигурация системы
Мой компьютер> Свойства> Дополнительные параметры системы> Закладка дополнительно> Переменные среды
Добавим переменную 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 собран можно указывать на него путь. Удачной работы!

суббота, 13 ноября 2010 г.

Работа с изображениями (начало начал)

В данном сообщении даются  базовые навыки работы с bmp.

План статьи:
  1. BMP и представление изображения  в памяти.
  2. Как явно открыть BMP
Подробно расписывать BMP я не стану, подробная спецификация формата дана http://ru.wikipedia.org/wiki/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