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

Доска почета


Popular Content

Showing most liked content on 04.03.2011 во всех областях

  1. 1 point
    Ссылка на апплет, можно прощупать что это такое. И здесь немного информации: Жадные змеи и активные контуры
  2. 1 point
    Реализация змей на OpenCV Архив с проектом: snake.rar
  3. 1 point
    Создание нового проекта в среде C++ Builder 6. (Для OpenCV v1.1) Библиотеки * cv.lib * cvaux.lib * cvhaartraining.lib * cxcore.lib * cxts.lib * Half.lib * highgui.lib * Iex.lib * IlmImf.lib * IlmThread.lib * Imath.lib * libjasper.lib * libjpeg.lib * libjpeg_bcc.lib * libpng.lib * libpng_bcc.lib * libtiff.lib * libtiff_bcc.lib * ml.lib * videoInput.lib * zlib.lib * zlib_bcc.lib короче все файлы из директории OpenCV с расширением lib, необходимо сконвертировать при помощи утилиты coff2omf.exe лежащей в поддиректории /bin директории, где у Вас установлен C++ Builder 6 (или LibConverter см. в прикрепленных ниже файлах) Конвертация необходима ввиду того, что в OpenCV библиотеки с расширением .lib сделаны для использования с Microsoft Visual C. Подключить сконвертированные библиотеки проекту (Меню Project -> Add to project). Еще нужно указать пути к заголовочным файлам библиотеки OpenCV, делается это на вкладке Directories/Conditionals, диалога Options вызываемого выбором пункта меню Project. Эти файлы расположены в нескольких поддиректориях директории в которую Вы поставили OpenCV.Например для OpenCV v1.1 это директории представленные ниже. * C:\Program Files\OpenCV\cv\include * C:\Program Files\OpenCV\cvaux\include * C:\Program Files\OpenCV\cxcore\include * C:\Program Files\OpenCV\ml\include * C:\Program Files\OpenCV\otherlibs\_graphics\include * C:\Program Files\OpenCV\otherlibs\ffopencv * C:\Program Files\OpenCV\otherlibs\highgui Побросать все сконвертированные lib файлы в директорию libs проекта (или другую) и указать путь к этой нашей директории аналогично тому, как это сделано для заголовочных файлов. Чекбокс Use dynamic RTL на вкладке Linker должен быть установлен, иначе требует несуществующую haartraining.dll Чекбокс Build with runtimre packages тоже должем быть установлен, иначе требует ilmthread.dll (тоже не знаю где взять). Так же рекомендуется установить флажок MFC compatibility, это необходимо для правильной работы функции cvGetSize(). И не забудте что DLL должны быть в зоне видимости программы. Приведенный ниже пример использует библиотеку OpenCV v1.1. Проект просто выводит захваченное видео в форму в соответствии с заданными координатами, в данном случае x=10, y=10 И еще если возникает ошибка 0xc0150002, то для корректной работы OpenCV1.1pre1 надо установить MSVCRT 8.0 (visual c++ run time). MSVCRT8.0 *Архив с проектом:simple.rar *Конвертер библиотек:LibConverter.rar *Набор сконвертированных lib:libs.rar *Набор DLL (на всякий случай):OpenCV11DLLs.rar //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "cv.h" #include "highgui.h" #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; CvCapture* capture = 0; IplImage *frame, *frame_copy = 0; void ProcessFrame( IplImage* image ); // Описатель шрифта (см. дальше) CvFont font; #define WIDTHBYTES(bits) ((((bits) + 31) / 32) * 4) //--------------------------------------------------------------------------- // Создание API шного битмапа из интеловского RGB изображения //--------------------------------------------------------------------------- HBITMAP CreateRGBBitmap(IplImage* _Grab) { char *App; IplImage *_Grab3=0,*_Grabf=0; LPBITMAPINFO lpbi = new BITMAPINFO; lpbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); lpbi->bmiHeader.biWidth = _Grab->width; lpbi->bmiHeader.biHeight =_Grab->height; lpbi->bmiHeader.biPlanes = 1; lpbi->bmiHeader.biBitCount = 24; lpbi->bmiHeader.biCompression = BI_RGB; lpbi->bmiHeader.biSizeImage = WIDTHBYTES((DWORD)_Grab->width * 8) * _Grab->height; lpbi->bmiHeader.biXPelsPerMeter = 0; lpbi->bmiHeader.biYPelsPerMeter = 0; lpbi->bmiHeader.biClrUsed = 0; lpbi->bmiHeader.biClrImportant = 0; void* pBits; HBITMAP hBitmap = CreateDIBSection( NULL, lpbi, DIB_RGB_COLORS, (void **)&pBits, NULL, 0 ); delete lpbi; if ( hBitmap ) App=(char*)pBits; // Если глубина изображения не IPL_DEPTH_8U (однобайтовое целое), конвертируем if(_Grab->depth!=IPL_DEPTH_8U) { _Grabf=cvCloneImage(_Grab); if(_Grab) {cvReleaseImage( &_Grab);} _Grab = cvCreateImage( cvSize(_Grabf->width,_Grabf->height),IPL_DEPTH_8U,_Grabf->nChannels); cvConvert(_Grabf,_Grab); if(_Grabf) {cvReleaseImage( &_Grabf);} } // Если изображение содержит один канал, создаем трехканальное изображение // Серое или бинарное if(_Grab->nChannels==1) { _Grab3 = cvCreateImage( cvSize(_Grab->width,_Grab->height),IPL_DEPTH_8U,3); cvMerge(_Grab,_Grab,_Grab,NULL,_Grab3); } // Если входное изображение трехканальное, просто копируем указатель на него // Цветное if(_Grab->nChannels==3) { _Grab3=_Grab; } // Получаем указатель на данные unsigned char* data; cvGetRawData(_Grab3, (uchar**)&data); // Копируем данные if(_Grab3) { for (int i=0;i<_Grab->height;i++) { memcpy(App+_Grab3->widthStep*(_Grab3->height-i-1),data+_Grab3->widthStep*i,_Grab3->width*3); } } // Очищаем память если создавали изображение, а не копировали указатель if(_Grab->nChannels==1) {cvReleaseImage( &_Grab3);} return hBitmap; } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- // Функция вывода изображения на HANDLE оконного компонента //--------------------------------------------------------------------------- void APIDrawIpl(int x,int y,IplImage* _Grab,void *HANDLE) { HDC hMemDC,hDC; hDC=GetDC(HANDLE); hMemDC = CreateCompatibleDC(hDC); HBITMAP Bitmap=CreateRGBBitmap(_Grab); SelectObject(hMemDC,Bitmap); BitBlt(hDC,x,y,_Grab->width,_Grab->height,hMemDC,0,0,SRCCOPY); DeleteObject(Bitmap); DeleteDC(hMemDC); DeleteDC(hDC); } //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { capture = cvCaptureFromCAM(0); // Инициализация шрифта (теперь можем вывести какой-нибудь текст) cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX,0.5,0.5,0,1,8); Application->OnIdle = IdleLoop; // Поток обработки простоя } //--------------------------------------------------------------------------- void __fastcall TForm1::IdleLoop(TObject*, bool& done) { done = false;// Поток обработки простоя if( capture ) { if( !cvGrabFrame( capture )) goto skip; frame = cvRetrieveFrame( capture ); if( !frame ) goto skip; //********************************************************* // Если стерли то что ниже - это надо раскомментировать // if( !frame_copy ) // frame_copy = cvCreateImage( cvSize(frame->width,frame->height), // IPL_DEPTH_8U, frame->nChannels ); // Делаем копию кадра, иначе может пропасть. // cvCopy( frame, frame_copy, 0 ); // Если стерли то что ниже - это надо раскомментировать //********************************************************* //********************************************************* // Если не нужно подгонять размер кадра - это можно стереть // Выделяем память под копию кадра if( !frame_copy ) frame_copy = cvCreateImage( cvSize(352,288), IPL_DEPTH_8U, frame->nChannels ); // Масштабируем под заданный размер cvResize( frame, frame_copy, CV_INTER_LINEAR ); // Если не нужно подгонять размер кадра - это можно стереть //********************************************************* ProcessFrame( frame_copy ); } skip:; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { cvReleaseImage( &frame_copy ); cvReleaseCapture( &capture ); } //--------------------------------------------------------------------------- void ProcessFrame( IplImage* img ) { APIDrawIpl(10,10,img,Form1->Handle); }[/code]
×