DirecTwiX
-
Количество публикаций
47 -
Зарегистрирован
-
Посещение
-
Days Won
1
Сообщения, опубликованные пользователем DirecTwiX
-
-
Так-то круто) Это Real-time видео?)
У меня не запустился... Печаль..
-
Как сделать так, что бы не приходилось таскать за собой десятки длл?
-
Нет, такого не было =\
Наверно из-за pre-built версии... Сейчас сам соберу... Если что - отпишу.
Upd:
Ура! Всё работает) Даже внутрь файла заходит) Спасибо большое)
-
Там нашёл библиотеке openCV с постфиксом "d". Без "d" ничего нет. Внутр не заходит.
-
если не заходит, значит подключены не отладочные библиотеки.
Отладочные.
-
Так и делаю. На функции load падает. Внутрь не заходит.
-
g_camInfo.cscd.load("haarcascade_frontalface_alt.xml");
Перенёс проект на другой комп и на этой строчке появляется Unhandled exception... Что это может быть? Нашёл файл с исходным кодом этой функции... Можно ли посмотреть на какой строке именно вылетает?
Но вот эта строка нормабльно загружает каскад:
cscd = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt.xml", 0, 0, 0 );
Помню раньше такая же бага была с матрицами и умельцы придумали такой выход:
IplImage* img = cvLoadImage("greatwave.jpg", 1);
Mat mtx(img); // convert IplImage* -> cv::Mat
Может что-нибудь подобное и для каскадов замутить можно?
-
Была идея написать такой алгоритм, когда распознавание текста писал. Оказывается такое уже есть в большом количестве)
Сейчас вот думаю... Если у букв выделить скелет, а потом распознать с помощью Hu моментов, то поидее должно быть очень неплохо.
З.ы. В проге из второго поста есть небольшой баг - при нажатии на "<->" пиксели, лежащие на нижней границе первого изображения, не затираются.
-
Можно предварительно по цвету найти области. И проверить их, а не все изображение.
А GPU - шный вариант Хаара не пробовали?
И еще, там есть опция FIND_BIGGEST_OBJECT, находит один самый большой объект. Существенно ускоряет процесс.
А можно ссылко на эту функцию? И FIND_BIGGEST_OBJECT надо в flags писать?
p.s. Искал на willowgarage и itseez =\
Pavia00, а Вы алгоритм сами писали? Можно ссылку на материал, которым руководствовались?
Upd:
FIND_BIGGEST_OBJECT кардинально меняет ситуацию) Если количество лиц на кадре не меняется (вроде так), то на расчёты требуется чуть ли не в 20 раз меньше времени. За 63мс вместо 1200мс) Еще раз спасибо
-
Хаар долго работает. Разрешение если только уменьшать... Что плохо скажется на качестве. Первые тем 10 в поиске обыскал =\
Upd: Скорость работы распознавание Хаара будет зависеть только от ЦП? Если на i7 запустить такую штуку, то за сколько она сможет найти лицо? Ориентировочно... (У меня проц старенький уже - 4.9 винда оценивает, и при сжатии 1.1 ему требуется 2 секунды)
-
Браузером то да)
По файлику что-то не охото качать) Есть варианты какие-нибудь?
-
Та же самая ошибка...
А у вас с него качается?
-
Вот адрес:
http://svn.gna.org/viewcvs/pokersource/trunk/poker-eval/
Скачал tortoiseSVN (и другой клиент тож качал), а он мне:
Error. Repository 'http://svn.gna.org/viewcvs/pokersource/branches/pokenum/poker-eval/' was permamently moved to 'http://svn.gna.org/viewcvs/pokersource/branches/pokenum/poker-eval/'Очень надо. Никто не сталкивался с такой проблемой?
-
Ладно... Уговорили) У калькулятора ширина и в правду нечётной была =\
Сколько тогда памяти выделять? Вот немного переписал:
void Bmp2Mat(HDC hDC, HBITMAP hBmp, cv::Mat &img) { BITMAPINFOHEADER bmi={0}; bmi.biSize = sizeof(BITMAPINFOHEADER); GetDIBits(hDC, hBmp, 0, 0, 0, (BITMAPINFO*)&bmi, DIB_RGB_COLORS); bmi.biPlanes=1; bmi.biBitCount = 24; bmi.biCompression = BI_RGB; int size=3*bmi.biHeight*bmi.biWidth; bmi.biHeight=-bmi.biHeight; BYTE *bmpData = new BYTE[size]; GetDIBits(hDC, hBmp, 0, -bmi.biHeight, bmpData, (BITMAPINFO*)&bmi, DIB_RGB_COLORS); img=cv::Mat(-bmi.biHeight, bmi.biWidth, CV_8UC3); memcpy(img.data, bmpData, size); delete [] bmpData; }
UPD: если перед int size=... добавитьif (bmi.biWidth%4) bmi.biWidth=4-bmi.biWidth%4+bmi.biWidth;
То всё будет работать... Но если ширина изображения не кратна 4, то справа появляются лишние столбы (от 1 до 3). Пробовал уменьшать размер матрицы - безрезультатно.
-
1. Иначе изображение будет перевёрнутым
2. Какие строки имеются в виду? GetDIBits и Img.data - это один длинный участок в памяти
3. А сколько? 24 бита на цвет -> всего 2^24 возможный цветов
Проблема решена. Оказалось, что везде работает, кроме калькулятора (win7). У него с шириной какая-то бага. По факту она 1 пиксель больше чем выдаёт GetWindowRect/GetClientRect =)
-
Неделю назад написал такую функцию:
void Bmp2Mat(HDC hDC, HBITMAP hBmp, cv::Mat &img8UC3) { int size=3*img8UC3.cols*img8UC3.rows; BYTE *bmpData = new BYTE[size]; BITMAPINFOHEADER bmi={0}; bmi.biSize = sizeof(BITMAPINFOHEADER); bmi.biPlanes = 1; bmi.biBitCount = 24; bmi.biWidth = img8UC3.cols; bmi.biHeight = -img8UC3.rows; bmi.biCompression = BI_RGB; GetDIBits(hDC, hBmp, 0, img8UC3.rows, bmpData, (BITMAPINFO*)&bmi, DIB_RGB_COLORS); memcpy(img8UC3.data, bmpData, size); delete [] bmpData; }
Вытаскивал матрицу из HDC... Работала (да и до сих пор работает) без пререканий, но только на одном окне (мне в принципе другие не нужны, но разобраться хочется). Сегодня решил потестить для окна калькулятора...
И что я увидел? Ошибку "Heap corruption detected"... Оказалось, что GetDIBits каким-то образом пишет за пределы массива... Гуглил-гуглил и вот что нашёл: http://www.rsdn.ru/forum/winapi/111983.flat.aspx
Там похожая проблема, но только для 4 бит (сказали, что функа ещё палитру пытается всунуть). Мне добавить в bmi массив размера 2^24????
На msdn вроде написано, что палитру не должно записывать =\
Да и почему для одного окна работает, а для другого сыпется?
-
Дело в MatchShapes. Очень плохая функция. Можно использовать только для достаточно больших контуров (буквы отпадают). Сам недавно писал распознавание текста... Сначала мучался с HU моментами, потом понял что к чему и отказался от них полностью. Работал с вектор-контурами (получилось немного по-сложней, но результат того стоил)
-
Так это понятно.
Я же в первом посте написал, что думал, что можно задать рои так img(Rect(...)). Но это неправда.
-
Оказалось, что это не задаёт рои текущей картинки) А создаёт ещё одну матрицу с указанным прямоугольником
-
Mat img; ... //Можно задать рои так: Mat roi(img, Rect(...)); //Но это займёт лишнюю переменную. А можно так img(Rect(...))
Только вот не пойму, как обнулить рои =\
-
Нашёл я функцию перевода HBitmap в IplImage. Решил переписать для cvMat.
При запуске вылетает умирает процесс, чей DC я использовал
void hBitmap2Mat(HBITMAP hBmp, cv::Mat &img) { 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; cv::Mat imgT(bmp.bmHeight, bmp.bmWidth, CV_MAKETYPE(depth, nChannels)); memcpy(imgT.data,(char*)(bmp.bmBits),bmp.bmHeight*bmp.bmWidth*nChannels); img=imgT; } ... RECT rect; GetClientRect(hWnd, &rect); int cx, cy; cx=rect.right-rect.left; cy=rect.bottom-rect.top; HBITMAP hBmp = CreateCompatibleBitmap(hDC, cx, cy); SelectObject(myDC, hBmp); BitBlt(myDC, 0, 0, cx, cy, hDC, rect.left, rect.top, SRCCOPY); cv::Mat img; hBitmap2Mat(hBmp, img); cv::imshow("1", img); cv::waitKey(0);
Вот. Спустя день... Я написал эту штуку) Думаю, пригодится кому-нибудь:void Bmp2Mat(HDC hDC, HBITMAP hBmp, Mat &img) { BYTE *bmpData = new BYTE[3*img.cols*img.rows]; BITMAPINFOHEADER bmi={0}; bmi.biSize = sizeof(BITMAPINFOHEADER); bmi.biPlanes = 1; bmi.biBitCount = 24; bmi.biWidth = img.cols; bmi.biHeight = -img.rows; bmi.biCompression = BI_RGB; GetDIBits(hDC, hBmp, 0, img.rows, bmpData, (BITMAPINFO*)&bmi, DIB_RGB_COLORS); memcpy(img.data, bmpData, 3*img.cols*img.rows); delete [] bmpData; }
- 2
-
Так там в файл сохраняют. Напрямую хотелось бы.
-
Нужно для скрина рабочего стола. Можно из hdc получить hbitmap =\
-
Вроде как есть оператор at. Но как им пользоваться для 24 (3х8) битной матрицы не пойму.
Трекер глаз (opensource)
в OpenCV
Опубликовано · Report reply
У меня процесс сразу падает... "Виндовс ищет пути решения данной проблемы..."
Что за инфракрасная подсветка? На обычной вебке не пойдёт?