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

DirecTwiX

Пользователи
  • Количество публикаций

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

  • Посещение

  • Days Won

    1

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

  1. HBitmap to cvMat

    Нашёл я функцию перевода 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. Трекер глаз (opensource)

    У меня процесс сразу падает... "Виндовс ищет пути решения данной проблемы..." Что за инфракрасная подсветка? На обычной вебке не пойдёт?
  3. Трекер глаз (opensource)

    Так-то круто) Это Real-time видео?) У меня не запустился... Печаль..
  4. Как сделать так, что бы не приходилось таскать за собой десятки длл?
  5. 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 Может что-нибудь подобное и для каскадов замутить можно?
  6. Нет, такого не было =\ Наверно из-за pre-built версии... Сейчас сам соберу... Если что - отпишу. Upd: Ура! Всё работает) Даже внутрь файла заходит) Спасибо большое)
  7. Там нашёл библиотеке openCV с постфиксом "d". Без "d" ничего нет. Внутр не заходит.
  8. Так и делаю. На функции load падает. Внутрь не заходит.
  9. Из файла есть, с камеры есть. А с экрана что-то не нашёл..
  10. Находим скелет (супер :))

    Была идея написать такой алгоритм, когда распознавание текста писал. Оказывается такое уже есть в большом количестве) Сейчас вот думаю... Если у букв выделить скелет, а потом распознать с помощью Hu моментов, то поидее должно быть очень неплохо. З.ы. В проге из второго поста есть небольшой баг - при нажатии на "<->" пиксели, лежащие на нижней границе первого изображения, не затираются.
  11. Распознавание лиц

    А можно ссылко на эту функцию? И FIND_BIGGEST_OBJECT надо в flags писать? p.s. Искал на willowgarage и itseez =\ Pavia00, а Вы алгоритм сами писали? Можно ссылку на материал, которым руководствовались? Upd: FIND_BIGGEST_OBJECT кардинально меняет ситуацию) Если количество лиц на кадре не меняется (вроде так), то на расчёты требуется чуть ли не в 20 раз меньше времени. За 63мс вместо 1200мс) Еще раз спасибо
  12. Распознавание лиц

    Хаар долго работает. Разрешение если только уменьшать... Что плохо скажется на качестве. Первые тем 10 в поиске обыскал =\ Upd: Скорость работы распознавание Хаара будет зависеть только от ЦП? Если на i7 запустить такую штуку, то за сколько она сможет найти лицо? Ориентировочно... (У меня проц старенький уже - 4.9 винда оценивает, и при сжатии 1.1 ему требуется 2 секунды)
  13. Не могу скачать с SVN

    Вот адрес: http://svn.gna.org/viewcvs/pokersource/trunk/poker-eval/ Скачал tortoiseSVN (и другой клиент тож качал), а он мне: Очень надо. Никто не сталкивался с такой проблемой?
  14. Не могу скачать с SVN

    Браузером то да) По файлику что-то не охото качать) Есть варианты какие-нибудь?
  15. Не могу скачать с SVN

    Та же самая ошибка... А у вас с него качается?
  16. Неделю назад написал такую функцию: 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 вроде написано, что палитру не должно записывать =\ Да и почему для одного окна работает, а для другого сыпется?
  17. Ладно... Уговорили) У калькулятора ширина и в правду нечётной была =\ Сколько тогда памяти выделять? Вот немного переписал: 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). Пробовал уменьшать размер матрицы - безрезультатно.
  18. 1. Иначе изображение будет перевёрнутым 2. Какие строки имеются в виду? GetDIBits и Img.data - это один длинный участок в памяти 3. А сколько? 24 бита на цвет -> всего 2^24 возможный цветов Проблема решена. Оказалось, что везде работает, кроме калькулятора (win7). У него с шириной какая-то бага. По факту она 1 пиксель больше чем выдаёт GetWindowRect/GetClientRect =)
  19. Работа с контурами

    Дело в MatchShapes. Очень плохая функция. Можно использовать только для достаточно больших контуров (буквы отпадают). Сам недавно писал распознавание текста... Сначала мучался с HU моментами, потом понял что к чему и отказался от них полностью. Работал с вектор-контурами (получилось немного по-сложней, но результат того стоил)
  20. Mat. Как обнулить roi?

    Mat img; ... //Можно задать рои так: Mat roi(img, Rect(...)); //Но это займёт лишнюю переменную. А можно так img(Rect(...)) Только вот не пойму, как обнулить рои =\
  21. Mat. Как обнулить roi?

    Так это понятно. Я же в первом посте написал, что думал, что можно задать рои так img(Rect(...)). Но это неправда.
  22. Mat. Как обнулить roi?

    Оказалось, что это не задаёт рои текущей картинки) А создаёт ещё одну матрицу с указанным прямоугольником
  23. hdc в bitmap. Возможно ли?

    Нужно для скрина рабочего стола. Можно из hdc получить hbitmap =\
  24. hdc в bitmap. Возможно ли?

    Так там в файл сохраняют. Напрямую хотелось бы.
×