Jump to content
Compvision.ru

Vicul

Пользователи
  • Content count

    43
  • Joined

  • Last visited

Everything posted by Vicul

  1. MS Visual C++ и OpenCV

    Всем привет, прошу прощения за глупый вопрос. Подключить Visual C++ к OpenCV проблем нет, вопрос в другом - предположим, апп готово и его необходимо передать к заказчику, возможно ли сделать статическое апп, которое уже включало в себе все нужные библиотеки OpenCV, т.е. чтобы заказчику не нужно было устанавливать OpenCV? Или все таки необходимо поставлять апп с dll-ками OpenCV?
  2. Работаю с программой, где я принимаю фреймы в BGR24 формате и передаю их в модуль, собранный на кодах FFMPEG, который передает их на тв сайт по RTMP протоколу. Все работает нормально, но возникла необходимость передавать фреймы не в BGR24, а в YUYV (YUY2), т.е, нужен конвертор BGR24 -> YUYV. Нашел коды на openCV, немного подправил их и получил одну фигню - концовка кадра почему то оказалась вначале, см. приатаченный файл. Не могу понять, где хомутнул, вот коды конвертора typedef struct _typeYUYV { char Y0; char U0; char Y1; char V0; } _typeYUYV; typedef enum _typeFormat { _NONE = 0, _UYVY, _YUYV } int ConvertBGRTo(char* pSrcBuf, size_t nSrcBufSize, _typeFormat nFormatType, char* pDstBuf, size_t& nDstBufSize, int outX, int outY) { int nRes = NO_ERROR; // Create IplImage for given BMP int nStep = outX*3; IplImage RgbImg; cvInitImageHeader( &RgbImg, cvSize(outX, outY), IPL_DEPTH_8U, 3 ); cvSetData( &RgbImg, (char*)pSrcBuf, nStep ); // Convert RGB24 to YUV (YCrCb) IplImage* pYuvImg = cvCloneImage(&RgbImg); cvCvtColor(&RgbImg,pYuvImg, CV_BGR2YCrCb); char* pDstBufEndPos = pDstBuf + nDstBufSize; for(int nCurYPos = outY - 1; nCurYPos > 0; nCurYPos--) { _typeYUV* pSrcBufCurPos = (_typeYUV*)(pYuvImg->imageData + nCurYPos * nStep); char* pSrcBufEndPos = (char*)pSrcBufCurPos + nStep; for(;(char*)pSrcBufCurPos < pSrcBufEndPos;) { _typeYUYV YUYV = { pSrcBufCurPos[0].Y, pSrcBufCurPos[0].U, pSrcBufCurPos[1].Y, pSrcBufCurPos[0].V }; if((pDstBuf + sizeof(_typeYUYV)) > pDstBufEndPos) break; memcpy(pDstBuf,&YUYV,sizeof(_typeYUYV)); pDstBuf += sizeof(_typeYUYV); if((char*)(pSrcBufCurPos + 2) > pSrcBufEndPos) break; pSrcBufCurPos += 2; } } cvReleaseImage(&pYuvImg); return nRes; } Поделитесь идеями?
  3. Конвертор формата BGR24 to YUYV

    значит буду капать дальше, спасибо за помощь!
  4. Конвертор формата BGR24 to YUYV

    Блин заработало!!! Дай Бог тебе здоровья и удачи. Полдня сидел, чуть себе резьбу не сорвал. Не понятно, почему CV_RGB2YCrC, ведь на вход у меня поступает bgr?
  5. Конвертор формата BGR24 to YUYV

    Со сдвигом разобрался, дело в том, что в приемном модуле у меня кодек был установлен как RAWVIDEO и заголовки типа BITMAP... там не нужны, потому все сдвигалось на размер этих заголовков. Но теперь проблема чисто opencv, изображение на выходе идет с синими лицами. С помощью cvSaveImage() определил, что bgr кадр поступает в конвертор c нормальными цветами, а вот на выходе идет уже с искажением на синий цвет. Где копать? коды конвертора в первом посте.
  6. Конвертор формата BGR24 to YUYV

    это понятно, что не правильный, только вот где? Вот здесь я заполняю BITMAPINFOHEADER в FFMPEG модуле для YUYV (аналог YUY2), может здесь я что то намутил? struct VIDEOSTRUCT { uint32_t lBufSize; uint32_t iWidth; uint32_t iHeight; int64_t iTime; uint8_t* pBuf; }; ....... list<VIDEOSTRUCT>::iterator delIter = VideoBuf.begin(); int headersSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); int bufSize = headersSize + delIter->lBufSize; PBYTE data = new BYTE [bufSize]; if (data != NULL) { BITMAPFILEHEADER* pbfHeader; BITMAPINFOHEADER* pbmiHeader; pbfHeader = (BITMAPFILEHEADER *)(data); pbfHeader->bfType = ('M' << CHAR_BIT) | 'B' ; //'MB'; pbfHeader->bfSize = bufSize; pbfHeader->bfOffBits = headersSize; pbfHeader->bfReserved1 = pbfHeader->bfReserved2 = 0; uint8_t* pData; pData = data + headersSize; pbmiHeader = (BITMAPINFOHEADER *)(pData - sizeof(BITMAPINFOHEADER)); pbmiHeader->biBitCount = 16; pbmiHeader->biWidth = delIter->iWidth; pbmiHeader->biHeight = delIter->iHeight; pbmiHeader->biPlanes = 1; pbmiHeader->biSize = sizeof(BITMAPINFOHEADER); pbmiHeader->biCompression = MAKEFOURCC('Y', 'U', 'Y', '2');//MAKEFOURCC('Y', 'U', 'Y', 'V');//MAKEFOURCC('Y', 'U', 'Y', 'V');//BI_RGB; pbmiHeader->biClrImportant = pbmiHeader->biClrUsed = pbmiHeader->biXPelsPerMeter = pbmiHeader->biYPelsPerMeter = 0; pbmiHeader->biSizeImage = DIBSIZE(*pbmiHeader);
  7. Конвертор формата BGR24 to YUYV

    Прикрепленный файл
  8. Всем привет, кто-нибудь подкиньте пример с cvDFT(), реально работающий, ну чтобы на входе картинка и на выходе ее результат. Заранее благодарю.
  9. cvInvert

    cvNot() - тоже инвертирует и без всякого "геморроя".
  10. Проблема с дебагом

    Я вам еще раз настоятельно рекомендую не брать длл-ки со стороны, а сделать это самостоятельно для своего компилятора, ссылку я дал. CMake формирует проект инсталляции под конкретную среду, что у вас установлена. И если у вас не идет компиляция - значит проблема со студией и надо с ней разбираться. Удачи! PS, когда будешь конфигурить проект в CMake, возьми конфу по минимуму, т.е., всякие там питоны, тесты, экземплы по боку.
  11. Проблема с дебагом

    У меня на VS2005 и opencv1.1 было что-то подобное. Проблема была в настройках opencv1.1. Я снес тогда 1.1 и установил 2.0, вобщем, у тебя должно быть отдельные пути к длл-кам для релиза и дебага (см. детали в топике MS Visual C++ и OpenCV http://www.compvision.ru/forum/index.php?s...20&start=20 ). И еще заметил одну особенность работы OpenCV1.1 и MFC - не очень дружат они с друг с другом, особенно на дебаге, если идешь через такую экзотику как cvWaitKey() . У меня стало стабильно работать, когда обрабоку на OpenCV запустил в отдельный поток, а результаты обработки передовал уже основному потоку на MFC. Эта фигня у меня была на 1.1, на 2.0 еще не проверял.
  12. cvCloneImage()

    Всем привет, похоже я сегодня засиделся, что клинит меня на самом простом. Есть 3-х канальный имидж IplImage* img, я из него делаю имидж_хейдер IplImage* result = cvCreateImageHeader(cvSize(point[1].x - point[0].x, point[1].y - point[0].y), img->depth, img->nChannels); result->widthStep = img->widthStep; result->imageData = img->imageData + point[0].y * img->widthStep + point[0].x * img->nChannels; То что получил (result) прекрасно можно показать в окно. Теперь хочу с него сделать клон и показать в окне IplImage* resultRotation = cvCloneImage(result); resultRotation->origin = result->origin; cvShowImage("Result", resultRotation); Так вот, эта гадюка, на cvShowImage() вываливается в exception. Сил уже нет разбираться, где хомутнул.
  13. cvCloneImage()

    Короче, чтобы не забивать себе голову этим шагом,сделал подругому resultRotation = cvCreateImage(cvGetSize(result), result->depth, 3); cvCopyImage(result, resultRotation); cvNamedWindow("Result", 0); cvShowImage("Result", resultRotation); Спасибо за помощь.
  14. cvCloneImage()

    Ладно, завтра на свежую голову разберусь с этим.
  15. cvCloneImage()

    Он одинаковый. Вот в дебаге данные на хейдер и клон.
  16. cvCloneImage()

    Если бы неправильно, то хейдер неправильно бы показывал обрезанную картинку. Я проверял это перед тем как сделать клон.
  17. Работа с контурами

    Согласен, он лишний. > Пример работает так себе. не согласен, пример работает. Просто его немного надо адаптировать к реальной задаче. У меня на плате надо найти микросхему, так вот перед нахождением контуров пришлось использовать cvCalcBackProject() с гистограммой на микросхему, а все остальное по тексту.
  18. MS Visual C++ и OpenCV

    Я уже попробовал - не проходит, требует регистрации. В приципе проблема ясна, думаю надо написать нормальный скрипт для инстала и использовать его во всех дальнейших проектах, как шаблон и не париться больше по этому поводу. Спасибо за помощь.
  19. MS Visual C++ и OpenCV

    Спасибо нашел этот ехе у них на сайте. Вы не пробовали устанавливать его длл-ки без запуска exe? Просто подсунуть их программе без регистрации? А то ломит мне инстал пак писать для этого.
  20. MS Visual C++ и OpenCV

    Это точно? И ее свободно (я имею виду легально) можно качнуть у мелкомягких? Или она все таки идет под лицензией студии с правом на неограниченные установки на компах заказчика?
  21. MS Visual C++ и OpenCV

    спасибо заработало, теперь надо разбираться еще с лицензией на vcredist_x86.exe, вообщем одни засады!
  22. MS Visual C++ и OpenCV

    Всем привет, опять поднимю эту тему, на этот раз с новой версией openCV2.0. Дело в том, что возникла проблема переноса проги с новыми длл-ками от 2.0 на другой комп, где нет openCV. При запуске проги получаю собщения типа The Application Failed To Initialize Properly (0xc0150002) итд. Хотя все нужные длл с OpenCV/Bin находятся в каталоге, где и прога. Перечисляю шаги 1. Vista и VS2005 с SP1. 2. Скачиваю openCV2.0 и устанавливаю пакет. 3. С помощью CMake делаю конфигурацию. Получаю каталоги с проектом для VS2005. 4. Запускаю этот проект и компилирую его. Здесь приходиться использовать опцию (Runtime Library) MD и MDd. Пытался использовать MT и MTd - не проходит, куча ошибок (за 600 перевалило, не находит переменные). 5. вообщем вернулся к MD и MDd. После компиляции получаю несколько ошибок на проекты ( не ДЛЛ-очные , типа тест и тд). Игнорирую их, т.к. все длл-ки и lib-ы сформировались как для дебагера, так и для релиза. 6. Прописываю пути к длл-кам OpenCV/Bin/debug и OpenCV/Bin/release в Виндовом окружении. 7. Прописываю пути к инклуде и к либам (для дебага и релиза) в VS2005. Перезагружаю комп. 8. Загружаю свой проект, с Runtime Library: Mtd и Mt. Перейти на MD и MDd не могу, у меня статический проект с MFC. 9. Компилирую проект - проблем нет, получаю дебаг и релиз версии проги. 10. Программа простая - вызов диалогового окна через MFC и по кнопке вызов трейда с функциями OpenCV: загрузить имидж и показать его в окне от OpenCV и потом по ESc закрыть его. Вообщем прога работает как в дебаге, так и в релизе. 11. На другой комп с XP переношу релизовую копию и длл-ки от OpenCV/Bin запускаю и получаю The Application Failed To Initialize Properly (0xc0150002)... Вообщем сижу второй день, не могу обойти это. А ставить на другой комп OpenCV не хочу, задача требует запуск проги без установки OpenCV. Любые идеи????
  23. Спасибо за ссылки, пошел читать.
×