Перейти к содержимому
Compvision.ru

Smorodov

Главные администраторы
  • Количество публикаций

    3 873
  • Зарегистрирован

  • Посещение

  • Days Won

    346

Все публикации пользователя Smorodov

  1. Как прикрутить OpenCV к билдеру?

    1) cvNamedWindow("opencv", 1); //делаем окно 2) IplImage* img = cvLoadImage("OpenCv.jpg"); // открываем картинку 3) cvShowImage( "opencv", img ); // отображаем в окно то, что загрузили 4) cvReleaseImage(&img); // освобождаем ресурсы // тут ждем нажатия чего-либо, так как далее окно закрывается. 5) cvDestroyWindow( "opencv" ); // убиваем окно
  2. Как прикрутить OpenCV к билдеру?

    У меня еще студия 2008 установлена , так что если не заработает можно попробовать поставить еще MSVCRT 9.0
  3. Фокусное растояние?

    Гомография вычисляется для экранных плоскостей кадров, то есть Вы сможете найти взаимную ориентацию камер. А зная ориентацию камер, можно найти координаты точек.
  4. Фокусное растояние?

    Почитайте вот это, может пригодится: Generation_of_a_3_D_Face_Model_from_One_Cameral.pdf http://cmp.felk.cvut.cz/~chum/Teze/Chum-PhD.pdf http://ru.wikipedia.org/wiki/RANSAC А это как найти перемещение и вращение из гомографии: #define cvM32f(Matrix,i,j) CV_MAT_ELEM(*(Matrix),float,(i),(j)) #define cvV32f(Matrix,i) Matrix->data.fl //Plane Pose Estimation void HomographyPoseEstimation(CvMat*Homography,CvMat*Intrinsic,CvMat*R,CvMat*T){ int i; float l; float cNorm,dNorm; CvMat*IntrinsicInverse=cvCreateMat(3,3,CV_32FC1); CvMat*H=cvCreateMat(3,3,CV_32FC1); CvMat*R1=cvCreateMat(3,1,CV_32FC1); CvMat*R2=cvCreateMat(3,1,CV_32FC1); CvMat*R3=cvCreateMat(3,1,CV_32FC1); CvMat*c=cvCreateMat(3,1,CV_32FC1); CvMat*p=cvCreateMat(3,1,CV_32FC1); CvMat*d=cvCreateMat(3,1,CV_32FC1); cvInvert(Intrinsic,IntrinsicInverse,CV_LU); //cvPrintMatrix(IntrinsicInverse); //H=Intrinsic^(-1) * Homography cvGEMM(IntrinsicInverse,Homography,1,NULL,1,H,0); // cvPrintMatrix(H); l=sqrt(sqrt(cvM32f(H,0,0)*cvM32f(H,0,0)+cvM32f(H,1,0)*cvM32f(H,1,0)+cvM32f(H,2,0)*cvM32f(H,2,0))*sqrt(cvM32f(H,0,1)*cvM32f(H,0,1)+cvM32f(H,1,1)*cvM32f(H,1,1)+cvM32f(H,2,1)*cvM32f(H,2,1))); //printf("l=%f\n",l); for(i=0;i<3;i++) cvM32f(R1,i,0)=cvM32f(H,i,0)/l; for(i=0;i<3;i++) cvM32f(R2,i,0)=cvM32f(H,i,1)/l; for(i=0;i<3;i++) cvM32f(T,i,0)=cvM32f(H,i,2)/l; for(i=0;i<3;i++) cvM32f(c,i,0)=cvM32f(R1,i,0)+cvM32f(R2,i,0); //c=R1 + R2 cvCrossProduct(R1,R2,p); //p=R1 x R2 cvCrossProduct(c,p,d); //d=c x p //Compute c and d Norms cNorm=cvNorm(c,NULL,CV_L2,NULL); dNorm=cvNorm(d,NULL,CV_L2,NULL); for(i=0;i<3;i++) cvM32f(R1,i,0)=1/sqrt(2)*(cvM32f(c,i,0)/cNorm + cvM32f(d,i,0)/dNorm); for(i=0;i<3;i++) cvM32f(R2,i,0)=1/sqrt(2)*(cvM32f(c,i,0)/cNorm - cvM32f(d,i,0)/dNorm); cvCrossProduct(R1,R2,R3); //R2=R1 x R2 //Get Rotation Matrix for(i=0;i<3;i++) { cvM32f(R,i,0)=cvM32f(R1,i,0); cvM32f(R,i,1)=cvM32f(R2,i,0); cvM32f(R,i,2)=cvM32f(R3,i,0); } // cvPrintMatrix(R); // cvPrintMatrix(T); cvReleaseMat(&IntrinsicInverse); cvReleaseMat(&H); cvReleaseMat(&R1); cvReleaseMat(&R2); cvReleaseMat(&R3); cvReleaseMat(&c); cvReleaseMat(&p); cvReleaseMat(&d); }
  5. IplImage to Bmp и обратно

    Только cvSplit дал Вам один канал из трех, если на входе три канала: R,G и B то Вы, вероятно вытащили один из них, посмотрите что в других каналах лежит, может оно Вам подойдет больше.
  6. Фокусное растояние?

    Здесь пример использования POSIT. http://opencv.willowgarage.com/wiki/Posit Если взаимное расположение точек в 3д известно то калибровать можно при помощи: cvCalibrateCamera2. (получается матрица, в которой есть фокусные расстояния по х и по у)
  7. Фокусное растояние?

    Здесь обсуждалась похожая проблема: http://www.compvision.ru/forum/index.php?showtopic=325
  8. Как прикрутить OpenCV к билдеру?

    1. По поводу (0хс150002) - попробуйте поставить MSVCR 8.0, может помочь, но помогает не всегда. 2. Это и есть пример с захватом видео. 3. я перепахал заголовочники.
  9. IplImage to Bmp и обратно

    Чтобы перевернуть изображение: cvFlip(img,img); cvEigenDecomposite - работает с одноканальным серыи изображением (создаете gray = cvCreateImage(size,IPL_DEPTH_8U,1 ); и потом, то что получилось после его выемки из Image конверитруете в серое cvCvtColor(image, gray, CV_BGR2GRAY); ) test_img = cvCreateImage(size,IPL_DEPTH_8U,1 ); - мы создаем серое изображение.
  10. Как прикрутить OpenCV к билдеру?

    Процесс писать пока нету времени, вот работающий минимальный проект Opencv 2.1 + Builder 6: Empty_proj.rar и мои include из opencv2.1/include/ include.rar
  11. Как прикрутить OpenCV к билдеру?

    img = cvLoadImage("OpenCv.jpg"); Вот здесь пример на Builder: http://www.compvision.ru/forum/index.php?showtopic=210
  12. IplImage to Bmp и обратно

    Тогда так: HBITMAP hbm = in_picture->Picture->Bitmap->Handle; size=cvSize(96,112); img_load = cvCreateImage(size,IPL_DEPTH_8U,1 ); img_load = hBitmap2Ipl(hbm); или Вот: void mycvGetImage(TImage *bimg, IplImage *iimg){ byte *ptr; long int datastep=iimg->widthStep; long int height=iimg->height; char *rawdata=iimg->imageDataOrigin; for(int y=0; y<height; y++){ ptr = (byte *) bimg->Picture->Bitmap->ScanLine[y]; long int adr=(height-1-y)*datastep; memcpy(rawdata+adr,ptr,datastep); }; };[/code] Это отсюда: http://roboforum.ru/wiki/%D0%9D%D0%B0%D1%8...C%2B%2B_Builder ЗЫ: Преобразования типа вырезать, повернуть перевернуть, и т.д. opencv делает намного быстрее чем GDI.
  13. IplImage to Bmp и обратно

    Может проще использовать вывод на Panel? Зачем нужен Image? Вот такой функцией, она есть во всех примерах и быстрее получится. APIDrawIpl(0, 0, frame_resized_clone, Panel1->Handle);
  14. Как прикрутить OpenCV к билдеру?

    Может сначала картинки из файла попробовать загрузить?
  15. IplImage to Bmp и обратно

    Было бы неплохо кусок кода привести. Интересует, как инициализируется Image1, как Вы достаете из него Bitmap и что происходит с Image1 дальше? Windowsовский это битмап или из билдера?
  16. Распознавание лиц

    Очень хорошо работающая библиотека распознавания лиц (с определением положения головы в 3D), есть бесплатная версия, для некоммерческого использования. http://www.seeingmachines.com/product/faceapi/downloads/
  17. IplImage to Bmp и обратно

    Вот такое нашел на просторах интернета: IplImage* hBitmap2Ipl(HBITMAP hBmp) { BITMAP bmp; ::GetObject(hBmp,sizeof(BITMAP),&bmp); int nChannels = bmp.bmBitsPixel == 1 ? 1 : bmp.bmBitsPixel/8; int depth = bmp.bmBitsPixel == 1 ? IPL_DEPTH_1U : IPL_DEPTH_8U; IplImage* img = cvCreateImageHeader( cvSize(bmp.bmWidth, bmp.bmHeight) , depth, nChannels ); img->imageData = (char*)malloc(bmp.bmHeight*bmp.bmWidth*nChannels*sizeof(char)); memcpy(img->imageData,(char*)(bmp.bmBits),bmp.bmHeight*bmp.bmWidth*nChannels); return img; }[/code] Правда не слышал, чтобы opencv поддерживала тип IPL_DEPTH_1U, у них по этому поводу с интелом некоторая несовместимость (поставьте там такое: int depth = IPL_DEPTH_8U вместо , int depth = bmp.bmBitsPixel == 1 ? IPL_DEPTH_1U : IPL_DEPTH_8U; должно работать), но в целом кусок вроде годится, правда сам не компилировал.
  18. Как прикрутить OpenCV к билдеру?

    Посмотрите здесь: http://www.compvision.ru/forum/index.php?showtopic=64
  19. CvMat *map_matrix; IplImage *cropped = cvCreateImage(cvSize(W, H),IPL_DEPTH_8U,3); /* * Вырезаем прямоугольный кусочек из исходного изображения x,y,w,h,поворот; */ double angle = 30; map_matrix = cvCreateMat(2, 3, CV_64FC1); cv2DRotationMatrix(cvPoint2D32f(middlex, -middley), angle, 1.0, map_matrix); cvSetReal2D(map_matrix, 0, 2, middlex); cvSetReal2D(map_matrix, 1, 2, middley); cvGetQuadrangleSubPix(image, cropped, map_matrix); cvReleaseMat(&map_matrix);[/code] Этот код вырезает повернутый на angle градусов относительно точки middlex,middley прямоугольник (я поворачивал этим куском относительно центра).
  20. Работа с камерами

    Онлайн трансляция с МКС: mms://a1709.l1856953708.c18569.g.lm.akamaistream.net/D/1709/18569/v0001/reflector:53708 Для любителей половить НЛО
  21. Работа с камерами

    Это скорее к MSDN чем к OpenCV. Перечисляйте все девайсы, отлавливайте камеры, и выводите их имена. Вот ссылка (первая на которую наткнулся): http://www.codeproject.com/KB/system/SimpleSetup.aspx
  22. Неплохой по моему мнению выбор деталей и модулей роботов для самоделания http://www.minibot.ru/
  23. Работа с камерами

    В документации написано только про фреймрейт: CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1); fps - и есть фреймрейт. Чтобы запись шла правильно (реалтайм), нужно знать с какой скоростью просчитывается видео. Это можно измерить. Можно просто рассчитать быстро, а в фреймрейте установить, значение, с которым вы хотели бы воспроизводить файл. Я обычно указываю фреймрейт своей вэбки, большой ошибки не возникает.
  24. Фоторедактор

    Фоторедактор - нетипичное применение opencv, хотя и возможное. Что касается примеров, то их лучше смотреть в директории с примерами (examples) которые идут в комплекте. Там есть почти все функции которые нужны для работы, к тому же они не отяжелены GUI.
  25. Распознавание лиц

    Там очень много переводить (о том как работает), технология, достаточно сложная. Можно краткое описание посмотреть здесь: http://ru.wikipedia.org/wiki/%D0%90%D0%BA%...%80%D0%BC%D1%8B Да и примеры там есть, run-build - это построение статистической модели на основе размеченных фотографий. Нужно построить один раз (долгая процедура). run-fit - это собственно распознавалка.
×