-
Количество публикаций
3 873 -
Зарегистрирован
-
Посещение
-
Days Won
346
Все публикации пользователя Smorodov
-
1) cvNamedWindow("opencv", 1); //делаем окно 2) IplImage* img = cvLoadImage("OpenCv.jpg"); // открываем картинку 3) cvShowImage( "opencv", img ); // отображаем в окно то, что загрузили 4) cvReleaseImage(&img); // освобождаем ресурсы // тут ждем нажатия чего-либо, так как далее окно закрывается. 5) cvDestroyWindow( "opencv" ); // убиваем окно
-
У меня еще студия 2008 установлена , так что если не заработает можно попробовать поставить еще MSVCRT 9.0
-
Гомография вычисляется для экранных плоскостей кадров, то есть Вы сможете найти взаимную ориентацию камер. А зная ориентацию камер, можно найти координаты точек.
-
Почитайте вот это, может пригодится: 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); }
-
Только cvSplit дал Вам один канал из трех, если на входе три канала: R,G и B то Вы, вероятно вытащили один из них, посмотрите что в других каналах лежит, может оно Вам подойдет больше.
-
Здесь пример использования POSIT. http://opencv.willowgarage.com/wiki/Posit Если взаимное расположение точек в 3д известно то калибровать можно при помощи: cvCalibrateCamera2. (получается матрица, в которой есть фокусные расстояния по х и по у)
-
Здесь обсуждалась похожая проблема: http://www.compvision.ru/forum/index.php?showtopic=325
-
1. По поводу (0хс150002) - попробуйте поставить MSVCR 8.0, может помочь, но помогает не всегда. 2. Это и есть пример с захватом видео. 3. я перепахал заголовочники.
-
Чтобы перевернуть изображение: 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 ); - мы создаем серое изображение.
-
Процесс писать пока нету времени, вот работающий минимальный проект Opencv 2.1 + Builder 6: Empty_proj.rar и мои include из opencv2.1/include/ include.rar
-
img = cvLoadImage("OpenCv.jpg"); Вот здесь пример на Builder: http://www.compvision.ru/forum/index.php?showtopic=210
-
Тогда так: 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.
-
Может проще использовать вывод на Panel? Зачем нужен Image? Вот такой функцией, она есть во всех примерах и быстрее получится. APIDrawIpl(0, 0, frame_resized_clone, Panel1->Handle);
-
Может сначала картинки из файла попробовать загрузить?
-
Было бы неплохо кусок кода привести. Интересует, как инициализируется Image1, как Вы достаете из него Bitmap и что происходит с Image1 дальше? Windowsовский это битмап или из билдера?
-
Очень хорошо работающая библиотека распознавания лиц (с определением положения головы в 3D), есть бесплатная версия, для некоммерческого использования. http://www.seeingmachines.com/product/faceapi/downloads/
-
Вот такое нашел на просторах интернета: 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; должно работать), но в целом кусок вроде годится, правда сам не компилировал.
-
Посмотрите здесь: http://www.compvision.ru/forum/index.php?showtopic=64
-
Картинка в картинке (с поворотом и др. преобр.) и вырезание прямоугольной области (можно повернутой)
Smorodov replied to Smorodov's topic in OpenCV
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 прямоугольник (я поворачивал этим куском относительно центра). -
Онлайн трансляция с МКС: mms://a1709.l1856953708.c18569.g.lm.akamaistream.net/D/1709/18569/v0001/reflector:53708 Для любителей половить НЛО
-
Это скорее к MSDN чем к OpenCV. Перечисляйте все девайсы, отлавливайте камеры, и выводите их имена. Вот ссылка (первая на которую наткнулся): http://www.codeproject.com/KB/system/SimpleSetup.aspx
-
Неплохой по моему мнению выбор деталей и модулей роботов для самоделания http://www.minibot.ru/
-
В документации написано только про фреймрейт: CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1); fps - и есть фреймрейт. Чтобы запись шла правильно (реалтайм), нужно знать с какой скоростью просчитывается видео. Это можно измерить. Можно просто рассчитать быстро, а в фреймрейте установить, значение, с которым вы хотели бы воспроизводить файл. Я обычно указываю фреймрейт своей вэбки, большой ошибки не возникает.
-
Фоторедактор - нетипичное применение opencv, хотя и возможное. Что касается примеров, то их лучше смотреть в директории с примерами (examples) которые идут в комплекте. Там есть почти все функции которые нужны для работы, к тому же они не отяжелены GUI.
-
Там очень много переводить (о том как работает), технология, достаточно сложная. Можно краткое описание посмотреть здесь: http://ru.wikipedia.org/wiki/%D0%90%D0%BA%...%80%D0%BC%D1%8B Да и примеры там есть, run-build - это построение статистической модели на основе размеченных фотографий. Нужно построить один раз (долгая процедура). run-fit - это собственно распознавалка.