-
Количество публикаций
1 427 -
Зарегистрирован
-
Посещение
-
Days Won
176
Все публикации пользователя Nuzhny
-
Там используется "метод усиления слабых классификаторов" или boosting. Вектор признаков формируется из значений вейвлетов Хаара. Читать надо начинать именно про boosting.
-
cvMatchTemplate тебе нужен. Каскады Хаара для такой задачи - это даже не пуша, а ядерная бомба по воробьям.
-
Что-то типа такого? Или этого?
-
Для того, чтобы Хаар обнаруживал не только фронтальные лица, его надо этому обучить. А это очень непростое и долгое дело. Я бы не взялся. Очень распространённый способ - поиск участков кожи по цвету или текстуре. У найденных областей анализируют форму и считают за лица, если соблюдаются определённые пропорции. Способ ненадёжный, но быстрый. Хотя.. Если все люди будут одной расы, то можно попробовать. Скорее всего потребуется отдельно придумывать эвристики для усатых, бородачей и очкариков. P.S. Пример не напишу - работы явно не на полчаса, а больше свободного времени у меня сейчас нет.
-
Вроде как с ними надо списываться, по результатам они могут выдать бесплатную версию на пол года, привязанную к одному компьютеру (и к Винде, и к железу одновременно).
-
cvSetImageROI/cvResetImageROI - очень медленная пара операций. Память выделилась, скопировалась, изменилась, скопировалась обратно, освободилась.
-
Распознавание лиц как для аутентификации или просто поиск лиц на фотографии (выделить прямоугольниками все имеющиеся лица)?
-
Случайно наткнулся на достаточно новую статью по теме: "REAL-TIME CALIBRATION-FREE AUTONOMOUS EYE TRACKER" Klefenz, Husar, Krenzer, Hess Там подход посложнее рассматривается.
-
Тоже попробовал C++ API И правда - многого не хватает. Жаль. По поводу падений в дебаге: его надо линковать с OpenCV откомпилированной с теми же отладочными опциями, с которыми ты компилируешь свой exe. Это старый и непобедимый недостаток С++ интерфейсов перед просто С интерфейсами.
-
Эх, мой второй старенький жёсткий с Убунтой накрылся - так и не поставлю её в какое-нибудь новое место. А под Винду я скачивал ffmpeg и за пару часов умудрился прикрутить ffmpeg вручную. Я тут на форуме уже описывал процесс. А под Линуксом не пробовал. Даже не знаю, что посоветовать.
-
Да, надо установить и скомпилировать OpenCV с поддержкой ffmpeg.
-
cvFindHomography
-
Матрицей, значит, типа CvMat, созданной с помощью функции cvCreateMat.
-
Выходной параметр должен быть матрицей с типом CV_32FC1 (то есть обычный float). Создай её и подавай вместо img1.
-
При выполнении какой строки появляется ошибка?
-
img = cvLoadImage( OpenDialog1->FileName.c_str() , 0);
-
Написал и самому стало интересно - будет ли оно работать. Набросал кусочек, попробуй вставить его вместо cvEqualizeHist: unsigned char t = 10; unsigned char T = 20; double k = 0.2; double K = 1.5; for (unsigned char *pbuf = (unsigned char *)bin_img->imageData, *stop = (unsigned char *)(bin_img->imageData + bin_img->imageSize); pbuf < stop; ++pbuf) { if (pbuf[0] < t) { pbuf[0] = (unsigned char)(k * (double)pbuf[0]); } else if (pbuf[0] > T) { pbuf[0] = (unsigned char)std::min(255., K * (double)pbuf[0]); } }
-
Для лучшего выделения контуров ещё можно усилить контрастность в определённом диапазоне яркостей. Не знаю на счёт OpenCV (есть в Фотошопе), но и самому реализовать довольно просто: 1. если яркость пикселя I[x, y] ниже некоторого нижнего порога t, то I[x, y] = k * I[x, y], где 0 > k < 1; 2. если яркость пикселя I[x, y] выше некоторого верхнего порога T, то I[x, y] = min(255, K * I[x, y]), где 1 > k < 2; 3. 0 < t < T < 255. Подбирая нижний и верхний пороги, а также коэффициенты усиления и ослабления можно добиться неплохого выделения исходного объекта, если тот находится на фоне с другой яркостью.
-
Окружности можно находить по-разному. Например, так: int main() { IplImage *img = cvLoadImage("d:\\eye.PNG"); IplImage *bin_img = cvCreateImage(cvGetSize(img), 8, 1); cvCvtColor(img, bin_img, CV_RGB2GRAY); cvEqualizeHist(bin_img, bin_img); cvCanny(bin_img, bin_img, 50, 150); CvMemStorage *storage = cvCreateMemStorage(0); CvContourScanner traverse = cvStartFindContours(bin_img, storage, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_NONE); for (CvSeq *contour = cvFindNextContour(traverse); contour; contour = cvFindNextContour(traverse)) { if (contour->total > 6) { CvBox2D box = cvFitEllipse2(contour); CvPoint center = cvPointFrom32f(box.center); CvSize size = cvSize(cvRound(box.size.width * 0.5), cvRound(box.size.height * 0.5)); // Проверка на окружность if ((double)box.size.width / (double)box.size.height > 0.9) cvEllipse(img, center, size, -box.angle, 0, 360, CV_RGB(0, 0, 255), 1, CV_AA, 0); } } cvEndFindContours(&traverse); cvReleaseMemStorage(&storage); cvShowImage("1", img); cvShowImage("2", bin_img); for (; { if (cvWaitKey(10) > 0) break; } cvReleaseImage(&bin_img); cvReleaseImage(&img); return 0; }[/code] В результате есть и ложные сработки, но их можно отфильтровать по "вторичным половым признакам":
-
Да, надо указывать просто /MT. При компиляции /MD программа требует наличия в системе установленных библиотек C++. Ты наверняка встречал случай, когда при установке некоторых программ доставлялась Microsoftf C++ redistributable library. Я полностью перекомпилировал OpenCV, выставляя на всех проектах /MT - компилировалась нормально.
-
Тебе надо скомпилировать cvhaartraining без использования crt dll.
-
Насколько я знаю, в OpenCV не механизма создания и управления потоками.
-
Что тебе на текущий момент больше подходит, то и выбирай. OpenCV хорошая, но неидеальная библиотека. Ну и никто не запрещает использовать и то, и другое одновременно.