-
Количество публикаций
31 -
Зарегистрирован
-
Посещение
Все публикации пользователя d1g1t
-
Всем привет. Задача на проверку подлинности. - Создать biometric model глаза (левого, правого). - Сделать iris detection - Проверить на валидность с образцом. (Iris Recognition) Подскажите пожалуйста как ето сделать. Какие финкции использовать, и т.д. Спасибо.
-
Привет. Попробуйте проверить существование файла (exists) за вказанным Вами путём.
-
Какой быстрый способ создать среднее изображение на основе обучающей выборки
d1g1t добавил тему в OpenCV
Привет. Какой быстрый способ создать среднее изображение на основе обучающей выборки. Например из 25 изобрежений. Сейчас делаю так: // Avarage Image IplImage* averageImage = cvCreateImage(cvGetSize(faceSet->faceImages[i].faces[0]), IPL_DEPTH_64F, 1); cvZero(averageImage); for(int index = 0; index < faceCount; index++) { IplImage* face = faceSet->faceImages[i].faces[index]; IplImage* averageImageFace = cvCreateImage(cvGetSize(face), 8, 1); IplImage* averageImageFace64 = cvCreateImage(cvGetSize(face), IPL_DEPTH_64F, 1); cvCvtColor(face, averageImageFace, CV_BGR2GRAY); cvScale(averageImageFace, averageImageFace64, 1.0, 0.0); cvAdd(averageImage, averageImageFace64, averageImage); cvReleaseImage(&averageImageFace); cvReleaseImage(&averageImageFace64); } Спасибо -
Привет Нужно проверить принадлежат ли значения шума, размытости, контраста к допустимым. Как лучше это сделать? Спасибо.
-
Спасибо за идею! Покопаюсь...
-
Производительность взросла раза в 2а. Время 0.17 - 0.2с. Спасибо.
-
Платформа мобильная - каждая секунда дорога. Время исполнения cvHaarDetectObjects приблизительно : 0.3 - 0.4с. CvSeq* faces = cvHaarDetectObjects(small_img, cascade_, storage_, 1.6, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize( small_img->width/4, small_img->height/4 )); Рассматриваю любые варианты для повышения производительности.
-
Есть ли способ распознать лицо (recognition) не используя каскады? Если да, быстрее ли он. Спасибо
-
Всем привет После применения cvThreshold и очистки, вот такой результат (сохранил в формате bmp): cvThreshold(limbusImg, threshold_image, 130, 200, CV_THRESH_BINARY); Проблема состоит в том, что в img->imageData есть данные которые не соответствуют данным на рисунке. for(int j=0; j<height; j++) { for(int i=0; i<width; i++) { int pixel_value = image[(int)(j)*width+(int)(i)]; log("pixel(%d,%d):%d", i, j, pixel_value); } // Белые писксели pixel(114,62):200 pixel(115,62):200 pixel(116,62):200 pixel(117,62):200 pixel(118,62):200 pixel(119,62):200 pixel(120,62):200 pixel(121,62):200 pixel(122,62):255 pixel(123,62):255 pixel(124,62):200 На рисунке (красний маркер) таких пикселей нету. Подскажите где собака зарыта. Спасибо.
-
Переделал: pixel_value1 = ((uchar*)(image->imageData + image->widthStep*y))[x]; Теперь все отлично работает. Огромное спасибо. Странно конечно. Изображение 8-битное. 1 пиксель - 1 байт. В 2й раз учту етот фактор...
-
Всем привет. Подскажите лучший способ по удалению (интерполяция или заполнения области в черный цвет) роговичного блика. Спасибо.
-
можете предоставить каскад для 1го глаза размером ~150x150
-
Не правильно выразился. После поворота, картинка должна занимать весь размер с позиции (0,0). Но почему-то она смещена вправо и вверх (Output изображение ) Целевое изображение - я пытаюсь достичь.
-
Всем привет. Пытаюсь повернуть изображение на -90. Но в результате картинку обрезает. Подскажите где косяк. Спасибо. IplImage* dstImg = cvCreateImage( cvSize(m_sourceImage->height, m_sourceImage->width), IPL_DEPTH_8U, 3); float centreX = m_sourceImage->width/2; float centreY = m_sourceImage->height/2; rotate(angle, centreX, centreY, m_sourceImage, dstImg ); cvReleaseImage(&m_sourceImage); m_sourceImage = dstImg; Функия rotate: void rotate(double angle, float centreX, float centreY, IplImage* src, IplImage* dst) { CvPoint2D32f centre; centre.x = centreX; centre.y = centreY; CvMat* translate = cvCreateMat(2, 3, CV_32FC1); cv2DRotationMatrix(centre, angle, 1.0, translate); cvWarpAffine(src, dst, translate, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS, cvScalarAll(0)); cvReleaseMat(&translate); } Input изображение: Output изображение: Целевое изображение:
-
Всем привет. Часто замечал вот такой код: IplImage* img = cvCreateImage(cvSize(WIDTH_PREF, HEIGHT_PREF), 8, 3); cvZero(img); Использование cvZero в даном случае излишество, не так ли?
-
Всем привет. Как с помощью OpenCV изуродовать изображения лица, что б получился смешной результат ))) Буду благодарен за либой пример.
-
Всем привет. Потестил вариант с PCA PCA Sample int trainer::findNearestNeighbor(float * projectedTestFace) { double leastDistSq = DBL_MAX; int i, iTrain, iNearest = -1; for(iTrain=0; iTrain<trainFaces_; iTrain++) { double distSq=0; for(i=0; i<eigens_; i++) { float d_i = projectedTestFace - projectedTrainFaceMat_->data.fl[iTrain*eigens_ + i]; distSq += d_i*d_i; } if(distSq < leastDistSq) { leastDistSq = distSq; iNearest = iTrain; } } return iNearest; } Для лица, которое есть в базе leastDistSq составляет < 7 000 000 Для лица, которого нет в базе leastDistSq составляет > 60 000 000. Разница очевидна. Но какой взять именно минимальный критерий O? Спасибо.
-
Спасибо за ответ. Скажите еще пожалуйста, создание модели и распознавание лиц используя Local binary patterns эффективнее за PCA?
-
Мне по gray тоже больше подходит. Еще вопросик: high порог для cvCanny - ето внешний порог для контура. Тоесть, для примера, если у нас монета на белом фоне, то high порог будет разница пикселей для белого тла и значения пикселей на грани монеты? Правильно ли я понял. А вот low порог - ето где?
-
Подскажыте что делаю нетак... Вот такой результат: Код: IplImage* in = cvLoadImage(fileName, 1); IplImage* r = cvCreateImage(cvGetSize(in), in->depth, 1); // R channel IplImage* g = cvCreateImage(cvGetSize(in), in->depth, 1); // G channel IplImage* b = cvCreateImage(cvGetSize(in), in->depth, 1); // B channel // reset cvZero(r); cvZero(g); cvZero(; cvSplit(in, r, g, b, NULL); double m, M; int W = in->width; int H = in->height; ellipse_image_=cvCreateImageHeader(cvSize(FRAMEW,FRAMEH), 8, 3 ); ellipse_image_->imageData=(char *)malloc(FRAMEW*FRAMEH*3); IplImage* dst; IplImage* sum_r = cvCreateImage(cvSize(W, H), 8, 1); IplImage* sum_g = cvCreateImage(cvSize(W, H), 8, 1); IplImage* sum_b = cvCreateImage(cvSize(W, H), 8, 1); IplImage* f_image_dx; IplImage* f_image_dy; f_image_dx = cvCreateImage(cvSize(W, H), 8, 1); // Sobel X of f_image_dx f_image_dy = cvCreateImage(cvSize(W, H), 8, 1); // Sobel Y of f_image_dy dst = cvCreateImage(cvSize(W, H), 8, 1); // R channel cvZero(f_image_dx); cvZero(f_image_dy); cvSobel(r, f_image_dx, 0, 1, 7); cvSobel(r, f_image_dy, 1, 0, 7); cvAbsDiffS(f_image_dx, f_image_dx, cvScalar(0, 0, 0, 0)); cvAbsDiffS(f_image_dy, f_image_dy, cvScalar(0, 0, 0, 0)); cvAdd(f_image_dx, f_image_dy, sum_r); // G channel cvZero(f_image_dx); cvZero(f_image_dy); cvSobel(g, f_image_dx, 0, 1, 7); cvSobel(g, f_image_dy, 1, 0, 7); cvAbsDiffS(f_image_dx, f_image_dx, cvScalar(0, 0, 0, 0)); cvAbsDiffS(f_image_dy, f_image_dy, cvScalar(0, 0, 0, 0)); cvAdd(f_image_dx, f_image_dy, sum_g); // B channel cvZero(f_image_dx); cvZero(f_image_dy); cvSobel(b, f_image_dx, 0, 1, 7); cvSobel(b, f_image_dy, 1, 0, 7); cvAbsDiffS(f_image_dx, f_image_dx, cvScalar(0, 0, 0, 0)); cvAbsDiffS(f_image_dy, f_image_dy, cvScalar(0, 0, 0, 0)); cvAdd(f_image_dx, f_image_dy, sum_; cvAdd(sum_r, sum_g, sum_r); cvAdd(sum_r, sum_b, sum_r); cvMinMaxLoc(sum_r, &m, &M, NULL, NULL); if((M - m) > 0) { cvScale(sum_r, dst, 255 / (M - m), -m * (255 / (M - m))); } cvReleaseImage(&f_image_dx); cvReleaseImage(&f_image_dy); cvReleaseImage(&r); cvReleaseImage(&g); cvReleaseImage(&; cvReleaseImage(&sum_r); cvReleaseImage(&sum_g); cvReleaseImage(&sum_; CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* circles = cvHoughCircles( dst, storage, CV_HOUGH_GRADIENT, 1, dst->height, 50, 1, 10, 150 ); for( int i = 0; i < circles->total; i++ ) { float* p = (float*)cvGetSeqElem( circles, i); LOGI("cx:%f", p[0]); cvCircle( ellipse_image_, cvPoint(cvRound(p[0]),cvRound(p[1])), 2, CV_RGB(0,255,0), -1, 2, 0 ); cvCircle( ellipse_image_, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 1, 2, 0 ); }[/code] Скажите на что accumulator threshold влияет в функции cvHoughCircles ?
-
Я немного не понял, что именно лутше для глаза не делать?
-
Поскажите почему на cvErode падает если изображение 32-битное ? IplImage* in = cvLoadImage(fileName, 1); IplImage* gray = cvCreateImage(cvSize(in->width, in->height), IPL_DEPTH_32F, 1); cvCvtColor(in, gray, CV_BGR2GRAY); double m, M; /* Место для значений максимума и минимума*/ IplImage *f_image_dx; /* производная по X */ IplImage *f_image_dy; /* производная по Y */ int W = in->width; /* Ширина входного изображения */ int H = in->height; /* Высота входного изображения */ f_image_dx = cvCreateImage(cvSize(W, H), IPL_DEPTH_32F, 1); /* Собель по X f_image_dx [ */ f_image_dy = cvCreateImage(cvSize(W, H), IPL_DEPTH_32F, 1); /* Собель по Y f_image_dy [ */ IplImage* dst = cvCreateImage(cvSize(W, H), IPL_DEPTH_32F, 1); /* Убираем часть помех */ LOGI_TRA("trying to erode"); cvErode(gray, dst, 0, 3); Результат Собеля для gray:
-
Огромное спасибо. Подскажите еще как с scr взять каждый канал.