tag:blogger.com,1999:blog-75432399758879932672024-02-19T09:02:01.871-08:00Компьютерное зрениеДанный блог - мои замечания касающиеся тем технического зрения. В данном блоге я буду выкладывать свои находки, инструкции и что у меня получилось.Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.comBlogger18125tag:blogger.com,1999:blog-7543239975887993267.post-80404991172015003932011-12-06T04:07:00.000-08:002011-12-06T04:08:59.054-08:00Лекции по обработке изображенийЗаканчиваю читать краткий <a href="http://cvbeginner.blogspot.com/">курс лекций</a> по цифровой обработке изображений и компьютерному зрению в целом.<br />
<br />
Слайды частично <a href="http://courses.graphicon.ru/main/vision">заимствованны</a> у Антона Конушина из МГУ.<br />
<br />
Может - кому нибудь поможет.Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-25941104960973448072011-09-15T22:57:00.000-07:002011-09-15T22:57:20.682-07:00PCL под MinGWПришлось помучится, но получилось собрать PCL под mingw!<br />
<br />
Теперь исследования по обработке 3Д изображений пойдут вперед.<br />
<br />
Итак, все по шагам.<br />
<br />
1) Загружаем <a href="http://dev.pointclouds.org/attachments/download/392/PCL-1.1.1-Source.tar.bz2">исходники</a> PCL<br />
<br />
2) Исходники <a href="http://www.boost.org/">Boost </a>>= 1.46 <br />
Собирается запуском скрипта <b>bootstrap</b>, затем через командную строку надо зайти в директорию с бустом и набрать <b>.\b2 toolset=gcc</b>. Это сработает только в том случае, если MinGW в вашем пути!<br />
<br />
3) Eigen 3.0.0 <br />
<br />
4) CMINPACK version >= 1.1.3<br />
Здесь потребуется фортран для Mingw. Если его по умолчанию нет то можно загрузить с помощью утилиты mingw-get, командой <b>mingw-get install fortran</b><br />
Сконфигурированным в CMake а затем заходим в директорию командной строкой набиваем <b>mingw32-make install</b><br />
<br />
5) FLANN version >= 1.6.8<br />
Чтобы собрать, видимо придется закоментить упоминание <b>va_list</b> в файлах logger.h и logger.cpp<br />
Сконфигурированным в CMake а затем заходим в директорию командной строкой набиваем <b>mingw32-make install</b><br />
<br />
6) QHULL version >= 2011.1<br />
Сконфигурированным в CMake а затем заходим в директорию командной строкой набиваем <b>mingw32-make install</b><br />
<br />
7) Далее приходится настраивать проект прописываем пути до собранных библиотек<br />
Самое важное записать в поле <b>Boost_LIB_DIAGNOSTIC_DEFINITIONS</b><br />
<b>-DBOOST_LIB_DIAGNOSTIC -DBOOST_THREAD_USE_LIB</b><br />
<br />
Конфигурируем и генерируем файлы сборки и начинаем собирать! Всем удачи!Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-26014639279447150252011-07-23T22:32:00.000-07:002011-07-23T22:32:07.602-07:00VLfeatНедавно наткнулся на интересную библиотеку технического зрения <a href="http://www.vlfeat.org/">VLfeat</a>.<br />
Данная библиотека активно разрабатывается научным сотрудником из Оксфорда <a href="http://www.vlfeat.org/~vedaldi/">Andrea Vedaldi</a> и <a href="http://vision.ucla.edu/~brian/">Brian Fulkerson</a>, на ход данной работы сильно повлиял их соавтор довольно известный ученый <a href="http://www.robots.ox.ac.uk/~az/">Andrew Zisserman</a>.<br />
<br />
Библиотека открытая, кросс платформенная собирается под VS2008,MinGW. <b>Не имеет внешних зависимостей</b>.<br />
<br />
Имеются два API: MATLAB и C.<br />
<br />
Функционал довольно банален, но хорошо написанные примеры и совместимость с MATLAB делает из данной библиотеки хороший инструмент для прототипированния алгоритмов технического зрения, которые затем можно либо перенести на C++ с использованием данной библиотеки или OpenCV.<br />
<br />
Теперь о функциональности библиотеки:<br />
1. Нахождение инвариантных точек на изображении (SIFT,MSER,PHOW(SIFT на пирамиде изображений))<br />
2. Кластеризация и поиск ближайшего соседа (K-means, kd-tree)<br />
3. Алгоритмы машинного обучение (на самом деле реализован только SVM и функция для изменения ядра), но его вполне хватает.<br />
<br />
При этом даны довольно интересные примеры:<br />
1. Поиск гомографии<br />
2. И индексация изображенийВиктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-44659226059006473112011-06-22T23:01:00.000-07:002011-06-22T23:01:39.038-07:00Вышла OpenCV 2.3.0rЧто нового:<br />
+ Встроенная поддержка videoInput (теперь при сборке под Windows можно использовать ieee1934 камеры)<br />
+ Раздельная документация для C, C++ и Python<br />
+ Примеры работы под Android<br />
+ Новый шаблон для калибровки камеры<br />
+ Поддержка OpenNI для работы с сенсором kinect прямо из OpenCV<br />
<br />
- Неисправный инсталлятор для VS2008 (приходится собирать вручную)<br />
<br />
<a href="http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs">Полный список</a>Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-46899591675783592222011-06-03T03:22:00.000-07:002011-06-03T03:28:35.043-07:00Преобразование cv::Mat в QImageОчень удобно при разработке приложений по техническому зрению с графическем интерфейсом использовать OpenCV и Qt.<br />
<br />
Но у некоторых людей возникают проблемы конвертировать изображения cv::Mat в QImage.<br />
<br />
Итак, это очень просто вот функция:<br />
<br />
<pre class="java" name="code">/* Параметры: 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<cv::Mat> 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;i<pImage->height();i++)
{
memcpy(pImage->bits()+i*pImage->bytesPerLine(),color.data+im.widthStep*i,im.widthStep);
}
}else{
//Копирование всего изображения
memcpy(pImage->bits(),color.data,im.imageSize);
}
return pImage;
}
</pre><br />
Вот и все. Надею кому-то будет полезно!Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com3tag:blogger.com,1999:blog-7543239975887993267.post-14027962442071201642011-02-14T22:16:00.000-08:002011-02-16T06:20:24.254-08:00Настройка проекта для компиляциями под разными операционными системамиФайл .pro, создаваемый программой QtCreator содержит инструкции как собирать проект основные команды<br />
<b style="color: magenta;">SOURCES </b>- исходники<br />
<b style="color: magenta;">HEADERS </b>- заголовки<br />
<b style="color: magenta;">TEMPLATE </b>- шаблон проекта например app или lib<br />
<b style="color: magenta;">INCLUDEPATH </b>- путь к используемым заголовкам<br />
<b style="color: magenta;">LIBS</b>- используемые библиотеки<br />
<br />
Так-же имеется куча дополнительных полезныхкомманд<br />
<span style="color: magenta;">CONFIG </span>- это самое общая и полезная команда для автоматической конфигурации проекта в переменную конфиг можно записать все что угодно и дальше проверять что храниться в конфиге<br />
<i>Например CONFIG += plugin opencv qwt</i> <br />
<span style="color: magenta;">MOC_DIR</span> - директория куда будем складывать moc файлы, созданные qmake<br />
<span style="color: magenta;">OBJECTS_DIR</span> - директория куда будут сохранены объекты <br />
<span style="color: magenta;">DEFINES</span> - добавляет инструкцию препроцессора <br />
<i>Пример DEFINES+= USEOPENCV</i><br />
<i>далее в коде:</i><br />
<i>#ifdef USEOPENCV</i><br />
<i> //DO SMTH</i><br />
<i>#endif</i><br />
<br />
ключевые слова<br />
win32 - сборка происходит для Windows<br />
unix - сборка проекта для Linux<br />
debug - сборка проекта в режиме отладки<br />
release - сборка проекта в релиз режиме<br />
<br />
Рассмотрим пример подключение OpenCV для Linux и Windows<br />
OPENCVDIR = "C:/Develop/opencv-1.0.x/opencv" <span style="color: #6aa84f;">#Директория в которой лежит OpenCV</span><br />
win32:{ <span style="color: #6aa84f;">#Если сборка под windows</span><br />
opencv{ <span style="color: #6aa84f;">#если в CONFIG мы добавили CONFIG+=opencv</span><br />
exists($$OPENCVDIR) {<span style="color: #6aa84f;">#Проверка существует ли директория </span><br />
DEFINES += USEOPENCV <span style="color: #6aa84f;">#Добавляем define</span><br />
INCLUDEPATH += $${OPENCVDIR}/cv/include \ <span style="color: #6aa84f;">#Путь к заголовкам</span><br />
$${OPENCVDIR}/cxcore/include \<br />
$${OPENCVDIR}/otherlibs/highgui<br />
LIBS += -L$${OPENCVDIR}/lib \ <span style="color: #93c47d;">#Путь к библиотекам</span><br />
-lcv \<br />
-lcxcore \<br />
-lhighgui <br />
}<br />
} <br />
}<br />
unix:{ <span style="color: #6aa84f;">#В случае Linux все проще т.к. все библиотеки и заголовки обычно лежат в системных папках</span><br />
opencv{<br />
<b>LIBS </b>+= -lcv \<br />
-lcxcore \<br />
-lhighgui<br />
<i>message</i>("OpenCV libraries connected") <span style="color: #6aa84f;">#Сообщение о том что все подключено</span><br />
} <br />
}<br />
<br />
Естественно такой громоздкий код не охота включать в каждый проект (особенно если проект состоит из множества частей <i>например с плагинами</i>)<br />
<br />
Для этого придуманы файлы .pri<br />
Создаете файл .pri, копируете в него настройку сборки и подключаете к pro файлу коммандой<br />
<i><b>include</b></i><br />
Пример:<br />
<i><b>include</b></i>(EthoStudioSDK/ethostudioconfig.pri )<br />
<br />
Вроде все. Удачи!Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-36090014601655771292011-02-10T01:49:00.000-08:002011-02-10T04:07:40.548-08:00Kinect Player<b> A Cross Platform Application for recording/viewing 3d data from kinect sencor.</b><br />
<b><br />
</b><br />
Source are avalable at <a href="http://code.google.com/p/kinect-player">http://code.google.com/p/kinect-player</a><br />
<b></b><br />
Binaries form Win32<b> <a href="http://kinect-player.googlecode.com/files/kinect-player.zip">http://kinect-player.googlecode.com/files/kinect-player.zip</a><br />
</b><br />
<br />
Чтобы собрать проект потребуется Qt 4.7.1, Qt Creator, OpenCV2.2 и Libfreenect (<b>Все должны быть собраны одной версией MinGW</b>) сборка под Linux не должна вызвать проблем.<br />
Программа позволяет записывать и просматривать 3д данные с сенсора Кинект. Вращать камеру вокруг сцены и т.д.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1p0dewcGxcg2PzlvcKNyN9O002u_c-DQvG_muTMx136NVvxFWL9lc8BrjVR3i9eComUUw5bKm813WjernIDsAX_KNBs9L4G5_u6D-paw6ONxbqyLRkexO6a4dINqPeMq72D3tF4eWXoVm/s1600/KinectPlayer2.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1p0dewcGxcg2PzlvcKNyN9O002u_c-DQvG_muTMx136NVvxFWL9lc8BrjVR3i9eComUUw5bKm813WjernIDsAX_KNBs9L4G5_u6D-paw6ONxbqyLRkexO6a4dINqPeMq72D3tF4eWXoVm/s320/KinectPlayer2.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Рабочее окно программы</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiww0MM_Sb21hmo_6We-iM4dIuckG8c01qDPExdU43RdRjxeA2BPd12dc9mu6XuEVBKUmTqu9kgdnJZChXXhx2VqqChyphenhyphenIa98ZHnPNaVsAjDJAZvnb2OUJKtJza21773BTiK0yTX63-8PqIo/s1600/KinectPlayer.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiww0MM_Sb21hmo_6We-iM4dIuckG8c01qDPExdU43RdRjxeA2BPd12dc9mu6XuEVBKUmTqu9kgdnJZChXXhx2VqqChyphenhyphenIa98ZHnPNaVsAjDJAZvnb2OUJKtJza21773BTiK0yTX63-8PqIo/s320/KinectPlayer.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Тоже окно под другой перспективой</td></tr>
</tbody></table><br />
<object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/-dMQAAfzPgQ?hl=ru&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/-dMQAAfzPgQ?hl=ru&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br />
Иконка кинекта взята у <br />
http://www.michaelcritz.com/2011/01/28/kinect-icon/Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com1tag:blogger.com,1999:blog-7543239975887993267.post-19347163567879217282011-02-08T05:22:00.000-08:002011-02-08T05:23:43.782-08:00Преобразование картинки из Libfreenect в cv::MatРешил написать маленькую заметку по поводу использования libfreenect и ее варпера для c freenect_sync<br />
<br />
<pre class="java" name="code">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);
</pre>Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-91607934300011060822011-02-07T02:13:00.000-08:002011-02-07T02:13:08.921-08:00Компрессор для Kinect данныхЗадача: сохранить цветное изображение RGB (24 бита на пиксель) + глубинное изображение 16 бит на пиксель. Изображения сохраняются в файл (глубинное изображение - без потерь PNG компрессором), цветное с потерями JPEG компрессором.<br />
<br />
Для решения использовались функции из библиотеки OpenCV 2.2.<br />
<br />
Полный исходный код проекта доступен по <a href="https://code.google.com/p/kinect-compression-using-opencv/">ссылке</a>.Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-54334807590548980752011-01-23T22:19:00.000-08:002011-01-23T22:19:27.546-08:00Текущие работыРешил написать о том какие проекты сейчас идут в лаборатории цифровой обработки изображений ИАиЭ СО РАН.<br />
<br />
<b>EthoStudio </b>- система для автоматизации этологических экспериментов. Применяется для изучения эффектов различных препаратов на животных. Интерфейс разработан на Qt, содержание использует OpenCVи другие бесплатные открытые библиотеки. <br />
Сайт проекта временно находится в разработке www.ethostudio.com<br />
<b>Применяется в</b>: ИЦиГ СО РАН, ЛИН СО РАН, институте физиологии им. Павлова РАН.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEQVRCuOaULgGfet7OOKvYS2Kzcd6TDClcUyVSK4LoEpdyjFmprRFrtTHlqyGbmJpSmPHpCeKIXGfZr4O7LLncEVnOTifiDhOOZ2w5_ktRsqSz-WLGpWUkD_wu_Eyc7WjQYn4j5kAeXbCw/s1600/mices.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEQVRCuOaULgGfet7OOKvYS2Kzcd6TDClcUyVSK4LoEpdyjFmprRFrtTHlqyGbmJpSmPHpCeKIXGfZr4O7LLncEVnOTifiDhOOZ2w5_ktRsqSz-WLGpWUkD_wu_Eyc7WjQYn4j5kAeXbCw/s320/mices.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Скриншот программы EthoStudio</td></tr>
</tbody></table><br />
<br />
<br />
<br />
<b>XScan </b>- программное обеспечение для системы для досмотра пассажиров в аэропорта. Позволяет захватывать изображения с аппарата <b>СибСкан </b>(разработанном в ИЯФе), обрабатывать их, представлять оператору и сохранять в БД или жесткий диск.<br />
<b>Применяется в</b>: Толмачева, Домодедово, Ханты-Мансийском аэропорту, саудовской аравии и т.д.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiToDG_1f-nObqqRtpzQhHtkCOchxsqd5FZI16PiXuu7vrmeoJ3LjSqHv9ektJpb0fmbLGiWg_pa6SRwIymL-1Xl09v9Eare53OUWhBn3mNLah2gNLbpMBViMIB1tZBIZK9U_JvUJGyn-UE/s1600/xscan.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiToDG_1f-nObqqRtpzQhHtkCOchxsqd5FZI16PiXuu7vrmeoJ3LjSqHv9ektJpb0fmbLGiWg_pa6SRwIymL-1Xl09v9Eare53OUWhBn3mNLah2gNLbpMBViMIB1tZBIZK9U_JvUJGyn-UE/s320/xscan.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Скриншот программы XScan</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td></tr>
</tbody></table> Есть еще несколько проектов в стадии зачатков... Но по всем проектам есть интересная работа.Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-11237641889354644982011-01-11T04:18:00.000-08:002011-01-14T02:27:05.774-08:00Сборка libfreenect с помощью MinGW под Windows Vista1. Релиз библиотеки <b>libfreenect </b>с git <a href="https://github.com/OpenKinect/libfreenect/archives/master">репозитория </a><br />
<br />
2. Загружаем зависимости<br />
2.1. Библиотеку работы с USB (<b>libusb</b>) <a href="http://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/1.2.2.0/libusb-win32-bin-1.2.2.0.zip/download">[прямая ссыла]</a> <br />
2.2. Библиотеку для работы с потоками (<b>pthreads</b>) <a href="ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-8-0-release.exe">[прямая ссыла]</a><br />
2.3. Библиотеку для отображения 3Д glut32 (расширение <b>OpenGL</b>) <a href="http://www.xmission.com/%7Enate/glut/glut-3.7.6-bin.zip">[прямая ссылка] </a><br />
<br />
Распаковываем файлы<br />
<br />
Glut32 распаковываем и добавляем в MinGW<br />
glut.h в директорию {MinGW}/include/GL<br />
glut32.lib и glut32.dll в директорию {MinGW}/lib<br />
<br />
{MinGW} - директория где установлена MinGW (Например C:/MinGW)<br />
<br />
Запускаем <b>CMake</b><br />
Выбираем директорию в которую распаковали <b>libfreenect </b>и директорию куда будем собирать проект.<br />
<br />
Нажимаем <b>Configure (вбираем MinGW, компиляторы gcc и g++) </b>- он выдаст много ошибок.<br />
Поставьте галочку <b>Andvanced </b>в верхней части настроек MinGW.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIXkiwdFtmriD6D8YPvbdWCrYGM5gUgq0ELnbZyMgqSGan3S5uRFODs0IaF9V-E-UDofF1qYnqb9Hr4l7gy0uLoXzpRJnon4HEwbtWfmUZi33v4Py5ZxDUxz6vNV7CjFK6q9L3iOssqt1E/s1600/freenect.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="340" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIXkiwdFtmriD6D8YPvbdWCrYGM5gUgq0ELnbZyMgqSGan3S5uRFODs0IaF9V-E-UDofF1qYnqb9Hr4l7gy0uLoXzpRJnon4HEwbtWfmUZi33v4Py5ZxDUxz6vNV7CjFK6q9L3iOssqt1E/s400/freenect.jpg" width="400" /></a></div>Устанавливаем значение переменных<br />
GLUT_INCLUDE_DIR - {MinGW}/include/GL<br />
GLUT_glut_LIBRARY - {MinGW}/lib/glut32.dll<br />
LIBUSB_1_INCLUDE_DIR - {libusb-win32-bin-1.2.2.0}\include<br />
LIBUSB_1_LIBRARY - {libusb-win32-bin-1.2.2.0}\lib\gcc\libusb.a<br />
THREAD _PTHREAD_INCLUDE_DIR - {PThreads}/Pre-built.2/include<br />
THREAD_PTHREAD_WIN32_LIBRARY - {PThreads}/Pre-built.2/lib/libpthreadGC2.a<br />
<br />
<b>отключаем опцию BUILD_FAKENECT</b> (с ней проект почему-то не собирается)<br />
<br />
Далее жмем <b>Configure</b>. Если все хорошо жмем <b>Generate</b>.<br />
<br />
Перед компиляцией надо устранить одни глюк: в MinGW<b>/include/sys/types.h</b> есть строка <br />
<b>typedef _ssize_t ssize_t; </b>- ее надо закоментить.<br />
Заходим с командной строки в директорию которую выбрали в CMake и запускаем <b>mingw32-make</b><br />
Ждем...<br />
Ура все получилось.<br />
Чтобы запустить пример из bin необходимо скопировать в эту папку целый букет dll.<br />
<br />
glut32.dll<br />
libfreenect.dll<br />
libusb0.dll (примечание исходное название библиотеки libusb0_x86.dll)<br />
pthreadGC2.dll <br />
<br />
Наслаждайтесь!<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilZ45gggwlvh7WynarSXq_LKrSKOsP_EkSDHIRjC83NOAAF5x-WbgMpRBkVtQ5sONPywHk3VfDIdcMLrRLBB5gLrL9ZEqg5uPhE-ib2SXqDSTpswLclo6TEZMa_8F3Q9TDEpyJgEsEnWO-/s1600/3d.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilZ45gggwlvh7WynarSXq_LKrSKOsP_EkSDHIRjC83NOAAF5x-WbgMpRBkVtQ5sONPywHk3VfDIdcMLrRLBB5gLrL9ZEqg5uPhE-ib2SXqDSTpswLclo6TEZMa_8F3Q9TDEpyJgEsEnWO-/s320/3d.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">3D изображение сцены</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-5taOR4NUc6IRerUXgcds1l6ahkc8JT9SLueCyUpVrjURuTJ-w7g6ojh3Gh-N8fpz1RIDbrPouvOYLgx66q7sqW_yF1ooPtByToTluggO-8IpYN5feKg8qZHZocROLc4_3gr83XDfIDvb/s1600/norm.bmp" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="140" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-5taOR4NUc6IRerUXgcds1l6ahkc8JT9SLueCyUpVrjURuTJ-w7g6ojh3Gh-N8fpz1RIDbrPouvOYLgx66q7sqW_yF1ooPtByToTluggO-8IpYN5feKg8qZHZocROLc4_3gr83XDfIDvb/s320/norm.bmp" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Глубинное изображение и цветное</td></tr>
</tbody></table>Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com2tag:blogger.com,1999:blog-7543239975887993267.post-22045721493525999052011-01-09T23:35:00.000-08:002011-01-09T23:35:09.654-08:00Джентельменский набор библиотек и технологий<u><b>Библиотеки для систем основанных на техническом зрении</b></u> <br />
<a href="http://opencv.willowgarage.com/">OpenCV </a>- библиотека алгоритмов компьютерного зрения<br />
<a href="http://qt.nokia.com/">Qt</a> - библиотека пользовательского интерфейса<br />
<a href="http://www.mrpt.org/">MRPT</a> - программный набор компонент для робототехники<br />
<a href="http://www.ros.org/">ROS</a> - надстройка над операционной системой для робототехники<br />
<a href="http://www.itk.org/">Itk</a> - инструменты для работы с медицинскими изображениями<br />
<a href="http://freeimage.sourceforge.net/">FreeImage</a> - загрузка и выгрузка изображений<br />
<br />
<u><b>Полезные библиотеки</b></u> <br />
<a href="http://www.boost.org/">Boost</a> - Библиотека шаблонов для C++<br />
<a href="http://irrlicht.sourceforge.net/">IrrLicht</a> - библиотека для 3Д рисования <br />
<a href="http://opencl.ru/">OpenCL</a> - ускорение и распараллеливание вычислений на GPUВиктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-54838963211970467982010-12-27T22:41:00.000-08:002010-12-27T22:41:05.479-08:00Подключение Opencv2.2 в Qt CreatorВ файле *.pro вашего проекта добавьте строчки:<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">OPENCVDIR = C:/Develop/opencv22<br />
exists($$OPENCVDIR) {<br />
DEFINES += USEOPENCV<br />
INCLUDEPATH += $${OPENCVDIR}/include<br />
LIBS += -L$${OPENCVDIR}/lib \<br />
-lopencv_core220.dll \<br />
-lopencv_imgproc220.dll \<br />
-lopencv_highgui220.dll<br />
DEPENDPATH += $${OPENCVDIR}/bin<br />
message("OpenCV libraries found in $${OPENCVDIR}")<br />
}<br />
else:message("OpenCV libraries not found.")</span><br />
<br />
Для подключения других модулей - надо только дописать их названия в LIBS.<br />
<br />
Тогда в любом файле просто подключаем требуемые модули:<br />
#include <opencv2/core/core.hpp><br />
#include <opencv2/imgproc/imgproc.hpp><br />
#include <opencv2/highgui/highgui.hpp><br />
<br />
И все работает.Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-3349233606726661982010-12-27T22:19:00.000-08:002010-12-27T22:19:06.539-08:00Сборка OpenCV2.2 MinGW/Windows XP1. Скачать новую версию <b>MinGW</b><br />
2. При сборке конфигурационных файлов с помощью утилиты cmake2.8 нужно в момент <b>Configure</b> выбрать пункт <b>Specify Native Compilers</b> указать компиляторы для C - gcc/ для C++ - g++<br />
3. Запускаем в папке куда собрались конфигурационные файлы утилиту <b>mingw32-make</b> (она должна быть в пути) если нет смотрите мое предыдущее сообщение.<br />
4. После того как собрали (примерно час времени) выполните команду <b>mingw32-make install</b> для создания прекомпилированных заголовков (хэдеров).<br />
<br />
Все готово можно приступать к работеВиктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-23068783769561707042010-12-19T06:12:00.000-08:002010-12-19T06:12:26.507-08:00Новые технологииЗаинтересовался технологиями<br />
<br />
<ol><li>ROS - операционная система для роботов.</li>
<li>OpenNI - библиотека для изучения кинематики людей.</li>
</ol>Итак подробнее ROS<br />
<a href="http://www.willowgarage.com/pages/software/ros-platform">http://www.willowgarage.com/pages/software/ros-platform</a><br />
Операционная система специально для роботов. Чем она отличается от обычных Linux дистрибутивов? Все несколькими вещами: абстрактными интерфейсами устройств, сообщениями между процессами, доступ к низкоуровневым функциям. Интересно что у Androidа есть аналогичные функции и он тоже в исходных кодах. Может ROS более производительна т.к. не требуется рисования красивых картинок? Я думаю разобраться. Этим проектом заведует компания разработчиков, которой я лично фанат т.к. они разработали OpenCV.<br />
<br />
Про OpenNI<br />
<a href="http://www.openni.org/">http://www.openni.org/</a><br />
Израильская компания PrimeSence разработала игрушку, которая легла в основу Microsoft Kinect.<br />
Этот проект - это открытые коды для драйверов для Kinect. Штука сочетает в себе камеру и измеритель расстояния. Интересно было бы ее вставить например в машину, но проблемы будут при 2х машинах с такими устройствами))).Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-5268710114396019052010-11-22T06:48:00.000-08:002010-11-22T10:19:10.115-08:00Сборка opencv из репозитория под WindowsДанная статья о том, как собрать opencv из исходных кодов из репозитория. Почему это важно, ведь всегда есть версия для установки под Windows? Потому, что в репозитории больше интересных примеров и более надежный код, чем в релизе.<br />
<br />
Шаг 1) Установка утилит<br />
1.1. SVN клиент <a href="http://tortoisesvn.tigris.org/">http://tortoisesvn.tigris.org/</a><br />
1.2. Cmake <a href="http://www.cmake.org/cmake/resources/software.html">http://www.cmake.org/cmake/resources/software.html</a> <br />
1.3. MinGW <a href="http://www.mingw.org/wiki/InstallationHOWTOforMinGW">http://www.mingw.org/wiki/InstallationHOWTOforMinGW</a><br />
<br />
Шаг 2) Конфигурация системы<br />
<div style="text-align: justify;">Мой компьютер> Свойства> Дополнительные параметры системы> Закладка дополнительно> Переменные среды </div><div style="text-align: justify;">Добавим переменную <b>PATH </b>со значением <b>ПУТЬ ДО ПАПКИ MinGW</b></div><div style="text-align: justify;"></div><div style="text-align: justify;"><b>Перезагружаем систему</b></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Шаг 3) Проверяем работу mingw запускаем консоль и выполняем mingw32-make</div><div style="text-align: justify;"></div><div style="text-align: justify;">Шаг 4) Загружаем репозиторий в <b>ВАШ ПУТЬ</b> через SVN с тестовыми данными <a href="https://code.ros.org/svn/opencv/trunk%20">https://code.ros.org/svn/opencv/trunk </a> ~ 600 Мб, либо без тестовых данных <a href="https://code.ros.org/svn/opencv/trunk/opencv">https://code.ros.org/svn/opencv/trunk/opencv </a> ~ 175Мб.</div><div style="text-align: justify;">Ждем...</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Шаг 5) Запускаем cmake </div><div style="text-align: justify;">В строке <i>Where is the source code</i> набираем <b>ВАШ ПУТЬ </b>в случае если вы загрузили с тестовыми данными <b>ВАШ ПУТЬ/opencv</b></div><div style="text-align: justify;"></div><div style="text-align: justify;">В строке<i> Where to build binaries</i> указываем куда класть данные проектов <i>(далее <b>buildPath</b>)</i>.</div><div style="text-align: justify;">Конфигурируем под Ваш компилятор либо VS (Visual Studio) либо MinGW кнопкой Configure.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Для компиляции примеров поставьте галочку BUILD_EXAMPLES</div><div style="text-align: justify;"> </div><div style="text-align: justify;">Примечание: возможна придется нажать Configure несколько раз.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-m8IYFYdydJ7yvyf8W3EcSGPz6xJvPXega7eYcK-BbFgmzSMCjc_4hj_TK-nfxVayQm69yBlpYIFMEl-CG492SdUVJyuEXGg-Giaa9EDYd1Q2VXGnJF5g3etdUQV9-TApnDjucIVvVc9F/s1600/cmake.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-m8IYFYdydJ7yvyf8W3EcSGPz6xJvPXega7eYcK-BbFgmzSMCjc_4hj_TK-nfxVayQm69yBlpYIFMEl-CG492SdUVJyuEXGg-Giaa9EDYd1Q2VXGnJF5g3etdUQV9-TApnDjucIVvVc9F/s320/cmake.png" width="320" /></a></div><div style="text-align: justify;"></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Шаг 6) Нажимаем Generate в <i><b>buildPath</b></i> будут сконфигурированные проекты.</div><div style="text-align: justify;"></div><div style="text-align: justify;">Шаг 7 mingw) Заходим в <i><b>buildPath </b></i>через командную строку <b>cmd</b> и исполняем <b>mingw32-make</b></div><div style="text-align: justify;">Собирается на компьютере Intel Dual Core 2.9 Hz ~ 30 минут</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwA_5NTahbAnjpiDAAkSMErw7RBTgZ1iZeg3cvn0xjVn3VF6tz0BdZW0x9e5nnaaxv-gy64Di7z66S4B7X0NtYLUaU3b3lPjC87wUvdo5kTIVjCtuZB5UB6k04_OVWSpAkTIGpvWsmU1dl/s1600/mingw32-make.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwA_5NTahbAnjpiDAAkSMErw7RBTgZ1iZeg3cvn0xjVn3VF6tz0BdZW0x9e5nnaaxv-gy64Di7z66S4B7X0NtYLUaU3b3lPjC87wUvdo5kTIVjCtuZB5UB6k04_OVWSpAkTIGpvWsmU1dl/s320/mingw32-make.png" width="320" /></a></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Шаг 7 VS) Заходим в <i><b>buildPath </b></i>через проводник находим файл Solution (sl) запускаем его и собираем в VS.<br />
Вот и все opencv собран можно указывать на него путь. Удачной работы!</div><div style="text-align: justify;"></div>Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com1tag:blogger.com,1999:blog-7543239975887993267.post-79888863373043315412010-11-13T09:01:00.000-08:002010-11-19T23:06:54.238-08:00Работа с изображениями (начало начал)В данном сообщении даются базовые навыки работы с bmp.<br />
<br />
План статьи:<br />
<ol><li>BMP и представление изображения в памяти.</li>
<li>Как явно открыть BMP</li>
</ol>Подробно расписывать BMP я не стану, подробная спецификация формата дана <a href="http://ru.wikipedia.org/wiki/BMP">http://ru.wikipedia.org/wiki/BMP</a><br />
Это самый простой формат, с него надо начинать работать<br />
Файл состоит из следующих частей:<br />
<br />
BITMAPFILEHEADER - важное поле <br />
BITMAPINFOHEADER - информация о изображение важные поля:<br />
biBitCount, biWidth, biHeight - <span style="font-size: small;">ЭТИХ ПАРАМЕТРОВ ДОСТАТОЧНО ЧТОБЫ ОТКРЫТЬ СТАНДАРТНЫЙ ФАЙЛ 24BIT</span><br />
Палитра - для 8 битных раскрашиваемых изображений (в принципе сейчас не используется)<br />
Само изображение<br />
<b>ВАЖНО!!! Изображение больше чем biWidth*biHeight, по историческим причинам biWidth реальный должен делиться на 4, по это realWidth = biWidth+biWidth%4 </b><br />
<b><br />
</b><br />
<br />
Код позаимствовал с <a href="http://www.vbforums.com/showthread.php?t=261522">http://www.vbforums.com/showthread.php?t=261522</a> структуры BITMAPFILEHEADER и BITMAPFILEHEADER если надо можно позаимствовать по же этому адресу. Примечание для GNU программистов WORD - 16 бита (int) DWORD и LONG - 32 бита (long) <br />
<br />
//Данная функция открывает bmp файл (на выходе имеем указатель на данные + заполненную структуру bitmapInfoHeader)<br />
<br />
<pre class="java" name="code">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;
}
</pre><br />
В данном примере мы предпологаем что открываем BMP стандартое 3 канала 8 бит каждый канал.<br />
<br />
так как "чистые" bmp - файлы в наше время экзотике в основном приходится работать с JPEG, PNG (интернет) или TIFF (медицина, наука), то данный пример просто для общего развития. Перечисленные форматы имеют намного более сложную структуру и данные сжаты алгоритмами, по этому они не открываются простым "способом".<br />
<br />
В следующем сообщение я распишу как упростить данную процедуру с помощью готовых библиотек и открывать другие типы файлов.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<ol></ol>Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0tag:blogger.com,1999:blog-7543239975887993267.post-27816657838690555692010-11-05T11:04:00.000-07:002010-11-08T01:57:19.527-08:00Компиляция opencv под андроид<div style="text-align: justify;">На днях наткнулся на интересную статью в которой разработчики перенесли возможности библиотеки opencv в телефон на основе операционной системы Android <a href="http://code.google.com/p/android-opencv/wiki/CVCamera">http://code.google.com/p/android-opencv/wiki/CVCamera</a>. Особенность этого проекта в том, что у авторов получилось создать готовое приложение, на которое можно посмотреть.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Я решил повторить данный эксперимент и собственно что получилось.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Далее я опишу детально как надо собрать opencv под android.</div><div style="text-align: justify;">Логическое отступление. Android - это Java подобная оболочка на ядре Linux. Для того чтобы использовать все функции opencv (которая написана на C++), нам во первых собрать ее под Linuxом или эмулятором Linuxа с использованием инструментов, которые нам предоставил Гугл.</div><div style="text-align: justify;">Собирать мы будем ее в динамические библиотеки (*.so) и будем использовать через враперы JNI. (Java Native Interface).</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Шаг 0. Необходимый инструментарий.</div><div style="text-align: justify;">Если Вы работаете под Linux то вам не нужно будет устанавливать Cygwin.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">0.1. Загружаем эмулятор линукса Cygwin (<a href="http://www.cygwin.com/">http://www.cygwin.com/</a>) </div><div style="text-align: justify;">0.2. Выбираем путь установки у меня он будет <b>C:/Develop/cygwin</b></div><div style="text-align: justify;">Во время установки он спросит какие компоненты нам будут нужны:</div><div style="text-align: justify;"> make - сборщик</div><div style="text-align: justify;"> cmake - сборщик</div><div style="text-align: justify;"> g++ - компилятор для c++</div><div style="text-align: justify;"> gcc - компилятор для c</div><div style="text-align: justify;"> swig - инструмент для создания интерфейсов</div><div style="text-align: justify;">Если сразу компоненты не установились запустите установщик еще раз он будет дополнять программы. </div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">0.3. Нам надо загрузить android-ndk. Обычный нам не будет подходить т.к. обычный с сайта Гугл не умеет компилировать с++. По этому нам необходимо загрузить <a href="http://crystax.net/android/ndk-r4.php">http://crystax.net/android/ndk-r4.php</a>. Загружаем на компьютер и распаковываем в каталог: <b>C:/Develop/cygwin/home/<i>username</i></b>, где <b><i>username </i></b>- имя вашего пользователя у меня SibAS.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Нам необходимо добавить данный каталог к системному пути:</div><div style="text-align: justify;">для этого </div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Мой компьютер> Свойства> Дополнительные параметры системы> Закладка дополнительно> Переменные среды </div><div style="text-align: justify;">Добавим переменную <b>PATH </b>со значением <b>C:\Develop\cygwin\home\SibAS\android-ndk-r4-crystax;C:\Develop\cygwin\bin;</b></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Шаг 1. Запускаем Cygwin и проверяем как все ли работает.</div><div style="text-align: justify;"><b>cd </b><b>android-ndk-r4-crystax</b></div><div style="text-align: justify;"><b>cd samples</b></div><div style="text-align: justify;"><b>cd hello-jni</b></div><div style="text-align: justify;"><b>ndk-build</b></div><div style="text-align: justify;"><br />
</div><div class="separator" style="clear: both; text-align: justify;"></div><div class="separator" style="clear: both; text-align: justify;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS6N_c-aUB8IT7q6k5fsal65mXBu_O5IpBLCqR_lR7W34WWwsKjdUGN52Q-tlqff756WcHvQMrQlS2fC3ydtnv72J-POXXEaUoOXt8ezfX4sUwRk-DZGIcijodW1Q5SS9jY2pMnmcEy3ai/s1600/Opencv+complete.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjS6N_c-aUB8IT7q6k5fsal65mXBu_O5IpBLCqR_lR7W34WWwsKjdUGN52Q-tlqff756WcHvQMrQlS2fC3ydtnv72J-POXXEaUoOXt8ezfX4sUwRk-DZGIcijodW1Q5SS9jY2pMnmcEy3ai/s320/Opencv+complete.jpg" width="320" /></a></div><div style="text-align: justify;"><b> </b>Экран того что мы должны увидеть.</div><div style="text-align: justify;">Если возникли ошибки они могут быть из-за путей (проверьте PATH) наберите в <b>echo $PATH</b> если все пути совпадают то ошибке в конфигурации cygwin - он напишет каких приложений не хватает и вы сможете их загрузить.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Отлично! Мы смогли собрать тестовое приложение!</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Теперь очередь за opencv.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Шаг 2. Нам надо загрузить исходный код проекта. С репозитория <a href="http://android-opencv.googlecode.com/svn/trunk/">http://android-opencv.googlecode.com/svn/trunk/</a>. Воспользуемся svn клиентом <a href="http://tortoisesvn.tigris.org/">http://tortoisesvn.tigris.org/</a> для загрузки репозитория (с помощью удобного интерфейса) в папку <b>C:/Develop/cygwin/home</b>.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Отлично теперь в папке <b>C:/Develop/cygwin/home </b>лежат следующие папки:<b> android-ndk-r4-crystax opencv samples</b> (последнее две из проекта)<b></b></div><div style="text-align: justify;"><b><br />
</b></div><div style="text-align: justify;">В Cygwin переходим в папку opencv</div><div style="text-align: justify;"><b>cd opencv</b></div><div style="text-align: justify;">и запускаем сборку...</div><div style="text-align: justify;"><b>sh build.sh</b></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">Собираться все это добро будет порядка часа так что можно посмотреть фильм или почитать книжку. Когда все готово мы увидим следующий экран:</div><div style="text-align: justify;"><br />
</div><div class="separator" style="clear: both; text-align: justify;"></div><div class="separator" style="clear: both; text-align: justify;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTuEyup951R-PzjF3CyKnWLdkmrwJMs3iNE_edeqjHeCL9EatnQK5dOWjdt1Glwxe4WvRg5HXQFV8XgfT6lgQzcMLt7Hc9AwX866N9F509A6agTH_RxDO6slu1YSfX9i7BQBuFcMHOTL2v/s1600/Opencv+complete2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTuEyup951R-PzjF3CyKnWLdkmrwJMs3iNE_edeqjHeCL9EatnQK5dOWjdt1Glwxe4WvRg5HXQFV8XgfT6lgQzcMLt7Hc9AwX866N9F509A6agTH_RxDO6slu1YSfX9i7BQBuFcMHOTL2v/s320/Opencv+complete2.jpg" width="320" /></a></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><b><br />
OpenCV собрано!</b></div><div style="text-align: justify;"><b><br />
</b></div><div style="text-align: justify;">Шаг 3. Собираем пример</div><div style="text-align: justify;"><b>cd samples </b>(которые мы загрузили с проектом а не с android-ndk)<b></b></div><div style="text-align: justify;"><b>cd CVCamera</b></div><div style="text-align: justify;"><b>sh build.sh</b></div><div style="text-align: justify;"><br />
</div><div class="separator" style="clear: both; text-align: justify;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidZePkMJ08AqlLB8yc0gscz0Q2X6erzFYZb5n728roA9JvvRJRortevEeqnSc54WJPVc0zdy-tbmoDGm8Pi52IJBFOCPX6IxEzMYbjaQ7766_Aw13gamN3f-_jn126eo3XyVV-aN984VTr/s1600/Opencv+complete3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidZePkMJ08AqlLB8yc0gscz0Q2X6erzFYZb5n728roA9JvvRJRortevEeqnSc54WJPVc0zdy-tbmoDGm8Pi52IJBFOCPX6IxEzMYbjaQ7766_Aw13gamN3f-_jn126eo3XyVV-aN984VTr/s320/Opencv+complete3.jpg" width="320" /></a></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><b><br />
</b></div><div style="text-align: justify;"><b>Проект собран в следующем сообщении будет описано как запустить его из eclipse</b></div><div style="text-align: justify;"><b><br />
</b></div>Виктор Куликовhttp://www.blogger.com/profile/01036227591911903531noreply@blogger.com0