Jump to content
Compvision.ru

milk3d

Пользователи
  • Content count

    28
  • Joined

  • Last visited

  • Days Won

    1

milk3d last won the day on December 28 2011

milk3d had the most liked content!

Community Reputation

2 Новичек

About milk3d

  • Rank
    Бывалый
  1. MS Visual C++ и OpenCV

    Спасибо огромное вам за помощь. Очень хотелось довести до логического конца эту программу. Не поверите ваш проект компелируется, создал новый с тем же исходным кодом, что и у вас никакие библиотеки не подключал больше, поставил MT и снова тоже самое, ни как не хочет. Видимо и впрямь нужно пользоваться 2005.
  2. MS Visual C++ и OpenCV

    Спасибо за библиотеки, но все равно тоже самое. Я попробовал на другом компьютере и тоже ничего. Непонятно почему такое происходит. Скорее всего надо использовать Microsoft Visual 2005, версия 1.1 разрабатывалсь на нем, наверное в более поздние версии были внесены какие то критичные для библиотеки изменения. Постараюсь установить 2005й, хотя может что то не то всё же я сделал. Список библиотек которые я подключаю: cv.lib cvaux.lib cvauxd.lib cvd.lib cvhaartraining.lib cxcore.lib cxcored.lib cxts.lib cxtsd.lib highgui.lib highguid.lib ml.lib mld.lib Может быть что-то лишнее? Если вам не трудно не могли бы вы скомпелировать мою программу, вот исходный код. Эта маленькая программа демонстрирующая работу генетического алгоритма.
  3. MS Visual C++ и OpenCV

    Если вам несложно то скиньте.
  4. MS Visual C++ и OpenCV

    Библиотеки LIBCMT в input нету. Может быть какая то ошибка при компиляции библиотек, потому что он когда я компилировал их повторно возникли ошибки. При компиляции проекта cvaux он выводит Rebuild All: 1 succeeded, 2 failed, 0 skipped. Такого же не должно быть? Я даже не представляю почему такое происходит. А какую версию microsoft visual вы используете?
  5. MS Visual C++ и OpenCV

    Спасибо за помощь я просто никогда не работал с большими библиотеками на С++. когда я ставлю в проекте MT то он мне выдает Если поставить MDd то всё нормально работает. Может я где то не так сделал, попробую ещё раз всё с начала. Я сейчас использую 1.1 может быть лучше будет использовать OpenCV 2.0?
  6. MS Visual C++ и OpenCV

    Я наверное безнадежен=) Проделал все что вы сказали. Для каждого проекта сделал полную перекомпеляцию, но вот когда начинаю компелировать свой проект с опцией "Multi threaded", он мне выдает ошибку связанную с LINK. Что мы сделали поменяв настройку "Multi threaded"? Теперь к проекту нужно подключить dll?
  7. MS Visual C++ и OpenCV

    Спасибо большое за ответ. С первой частью я справился А насчет dll, не могли бы вы подробнее описать?
  8. MS Visual C++ и OpenCV

    Я извиняюсь за повторный вопрос, но что то я не могу сделать это в одиночку. Недавно я написал маленькую программу с использованием OpenCV 1.1 и мне бы хотелось ее выложить в интернет. Но я ни как не могу понять, что нужно сделать для того что-бы она запускалась и у других людей у кого не установлена OpenCV. Если можете скажите как это сделать. Использовал я Microsoft Visual c++ Express.
  9. Я любитель и мне эта тема очень интересна, жаль что я не могу послушать лекцию=( Если вам не трудно не могли бы вы посоветовать материал по этой теме?
  10. А что вы думаете о задаче дополнения реальности (Augmented reality)? Недавно обнаружил, что большое количество маленьких и довольно больших проектов начинает выпускаться в которых используется дополнение реальности. К примеру тот проект от PleyStation о котором я писал на форуме http://www.compvision.ru/forum/index.php?showtopic=143. На западе идет активное изучение данной темы. Многие крупные компании так же ведут разработку, судя по их рекламным роликам.
  11. Всего то шесть неизвестных три точки у каждой по две координаты проекции, параметры камеры мне были известны. Спасибо большое направление задали, буду капать, а то без теории сложновато.
  12. Недавно перед собой поставил задачу определить координат и углы пзиционировния камеры по проекциям известных точек на изображении. Мне удалось зная координаты трех точек в мире и координаты их проекций определить позицию камеры. Для этого я составил систему из шести уравнений с шестью неизвестными рукаводствуясь этим материалом http://en.wikipedia.org/wiki/3D_projection. Найдя неизвестные я получил искомый результат. Вот только такая систем очень реагирует на точность входных данных и для экспериментальных значений ответ сильно долек от правды. Если кто то занимался подобной проблемой, посоветуйте если можете более оптимальное решение или просто направление в котором надо работать.
  13. В конце этого года на PlayStation выйдет игра, которая должна стать самым серьезным проектом для консоли использующим для игры камеру. Тема расширения реальности становится все более и более актуальной, и начинает входить в массы. Официальный сайт игры http://www.eyepet.com Информация на wiki http://en.wikipedia.org/wiki/EyePet И немного на моем блоге http://blog.vsreality.ru/?p=72
  14. Недавно меня спросили о коде получившейся программы. Я вот и подумал, что он может пригодиться еще кому то, и хотя эта программа всего лишь переделанный пример из OpenCV архива, под работу с видео. Я ничего не менял касающегося SURF алгоритма, только добавил работу с видео. Программа написана для MV С++. image.bmp - имя файла картинки, которая обводится рамкой. #include <cv.h> #include <highgui.h> #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <vector> #define ZOOM 2 using namespace std; IplImage *image = 0; double compareSURFDescriptors( const float* d1, const float* d2, double best, int length ) { double total_cost = 0; assert( length % 4 == 0 ); for( int i = 0; i < length; i += 4 ) { double t0 = d1[i] - d2[i]; double t1 = d1[i+1] - d2[i+1]; double t2 = d1[i+2] - d2[i+2]; double t3 = d1[i+3] - d2[i+3]; total_cost += t0*t0 + t1*t1 + t2*t2 + t3*t3; if( total_cost > best ) break; } return total_cost; } int naiveNearestNeighbor( const float* vec, int laplacian, const CvSeq* model_keypoints, const CvSeq* model_descriptors ) { int length = (int)(model_descriptors->elem_size/sizeof(float)); int i, neighbor = -1; double d, dist1 = 1e6, dist2 = 1e6; CvSeqReader reader, kreader; cvStartReadSeq( model_keypoints, &kreader, 0 ); cvStartReadSeq( model_descriptors, &reader, 0 ); for( i = 0; i < model_descriptors->total; i++ ) { const CvSURFPoint* kp = (const CvSURFPoint*)kreader.ptr; const float* mvec = (const float*)reader.ptr; CV_NEXT_SEQ_ELEM( kreader.seq->elem_size, kreader ); CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); if( laplacian != kp->laplacian ) continue; d = compareSURFDescriptors( vec, mvec, dist2, length ); if( d < dist1 ) { dist2 = dist1; dist1 = d; neighbor = i; } else if ( d < dist2 ) dist2 = d; } if ( dist1 < 0.6*dist2 ) return neighbor; return -1; } void findPairs( const CvSeq* objectKeypoints, const CvSeq* objectDescriptors, const CvSeq* imageKeypoints, const CvSeq* imageDescriptors, vector<int>& ptpairs ) { int i; CvSeqReader reader, kreader; cvStartReadSeq( objectKeypoints, &kreader ); cvStartReadSeq( objectDescriptors, &reader ); ptpairs.clear(); for( i = 0; i < objectDescriptors->total; i++ ) { const CvSURFPoint* kp = (const CvSURFPoint*)kreader.ptr; const float* descriptor = (const float*)reader.ptr; CV_NEXT_SEQ_ELEM( kreader.seq->elem_size, kreader ); CV_NEXT_SEQ_ELEM( reader.seq->elem_size, reader ); int nearest_neighbor = naiveNearestNeighbor( descriptor, kp->laplacian, imageKeypoints, imageDescriptors ); if( nearest_neighbor >= 0 ) { ptpairs.push_back(i); ptpairs.push_back(nearest_neighbor); } } } /* a rough implementation for object location */ int locatePlanarObject( const CvSeq* objectKeypoints, const CvSeq* objectDescriptors, const CvSeq* imageKeypoints, const CvSeq* imageDescriptors, const CvPoint src_corners[4], CvPoint dst_corners[4] ) { double h[9]; CvMat _h = cvMat(3, 3, CV_64F, h); vector<int> ptpairs; vector<CvPoint2D32f> pt1, pt2; CvMat _pt1, _pt2; int i, n; findPairs( objectKeypoints, objectDescriptors, imageKeypoints, imageDescriptors, ptpairs ); n = ptpairs.size()/2; if( n < 4 ) return 0; pt1.resize(n); pt2.resize(n); for( i = 0; i < n; i++ ) { pt1[i] = ((CvSURFPoint*)cvGetSeqElem(objectKeypoints,ptpairs[i*2]))->pt; pt2[i] = ((CvSURFPoint*)cvGetSeqElem(imageKeypoints,ptpairs[i*2+1]))->pt; } _pt1 = cvMat(1, n, CV_32FC2, &pt1[0] ); _pt2 = cvMat(1, n, CV_32FC2, &pt2[0] ); if( !cvFindHomography( &_pt1, &_pt2, &_h, CV_RANSAC, 5 )) return 0; for( i = 0; i < 4; i++ ) { double x = src_corners[i].x, y = src_corners[i].y; double Z = 1./(h[6]*x + h[7]*y + h[8]); double X = (h[0]*x + h[1]*y + h[2])*Z; double Y = (h[3]*x + h[4]*y + h[5])*Z; dst_corners[i] = cvPoint(cvRound(X), cvRound(Y)); } return 1; } int main(int argc, char** argv) { const char* object_filename = argc == 3 ? argv[1] : "image.bmp"; CvMemStorage* storage = cvCreateMemStorage(0); cvNamedWindow("Object", 1); cvNamedWindow("Object Correspond", 1); static CvScalar colors[] = { {{0,0,255}}, {{0,128,255}}, {{0,255,255}}, {{0,255,0}}, {{255,128,0}}, {{255,255,0}}, {{255,0,0}}, {{255,0,255}}, {{255,255,255}} }; IplImage* object = cvLoadImage( object_filename, CV_LOAD_IMAGE_GRAYSCALE ); IplImage* object_color = cvCreateImage(cvGetSize(object), 8, 3); cvCvtColor( object, object_color, CV_GRAY2BGR ); CvSeq *objectKeypoints = 0, *objectDescriptors = 0; int i; CvSURFParams params = cvSURFParams(500, 1); cvExtractSURF( object, 0, &objectKeypoints, &objectDescriptors, storage, params ); CvPoint src_corners[4] = {{0,0}, {object->width,0}, {object->width, object->height}, {0, object->height}}; CvPoint dst_corners[4]; for( i = 0; i < objectKeypoints->total; i++ ) { CvSURFPoint* r = (CvSURFPoint*)cvGetSeqElem( objectKeypoints, i ); CvPoint center; int radius; center.x = cvRound(r->pt.x); center.y = cvRound(r->pt.y); radius = cvRound(r->size*1.2/9.*2); cvCircle( object_color, center, radius, colors[0], 1, 8, 0 ); } cvShowImage( "Object", object_color ); CvCapture* capture = cvCreateCameraCapture(0); IplImage* frame; //Размеры входного изображения int width = (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH); int height= (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT); CvSize size = cvSize(width,height); //Для серого изображения IplImage* image1 = cvCreateImage(size, 8, 1); //Для уменьшенного в ZOOM раз серого изображения IplImage* image2 = cvCreateImage(cvSize((int)(width/ZOOM),(int)(height/ZOOM)), 8, 1); while(1){ frame = cvQueryFrame( capture ); if( !frame ) break; //Делаем входное изображение серым cvCvtColor( frame, image1, CV_RGBA2GRAY ); //Уменьшаем серое изображение cvResize(image1,image2,CV_INTER_LINEAR); CvSeq *imageKeypoints = 0, *imageDescriptors = 0; cvExtractSURF( image2, 0, &imageKeypoints, &imageDescriptors, storage, params ); if( locatePlanarObject( objectKeypoints, objectDescriptors, imageKeypoints, imageDescriptors, src_corners, dst_corners )) { //Рисуем линии контура рамки на входном изображении(frame) for( i = 0; i < 4; i++ ) { CvPoint r1 = dst_corners[i%4]; CvPoint r2 = dst_corners[(i+1)%4]; cvLine( frame, cvPoint(r1.x*ZOOM, r1.y*ZOOM), cvPoint(r2.x*ZOOM, r2.y*ZOOM), colors[8] ); } } //Выводим входное изображение(frame) в окно программы cvShowImage( "Object Correspond", frame ); char c = cvWaitKey(33); if( c == 27 ) break; } cvReleaseCapture( &capture ); cvDestroyWindow("Object"); cvDestroyWindow("Object Correspond"); return 0; }
  15. Поле огромное конечно, Россия в целом отстает от мира в целом по разработкам. И вы правильно заметили тот факт, что многое держится на энтузиазме. Я иногда читаю форумы по робототехнике так люди делают общие заказ деталей из Америки, так как в России достать комплектующие просто не реально. Поле для развития робототехники в России действительно большое. Вот только не знаю насчет спроса, есть ли у нас в спрос на высокие технологии. А то одна нефть и газ=)
×