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

tybik

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

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

  • Посещение

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

  1. Добрый день! Помогоите пожалуйста. Стоит такая задача. Хочу улучшить картинку перед тем как отдать ее на распознавание. Нашел метод увеличения контрастности. Суть его состоит в том что: 1. Ищем самый светлый элемент и самый темный. (max и min) 2. Смотрим на сколько они отличаются от максимально возможных вариантов яркости элементов. 3. Заменяем наш max на самый яркий элемент, min на минимально яркий.. (тоесть по сути раздвигаем гистограмму) Как это лучше реализовать в OpenCV как получить доступ к пикселю в IplImage? Может у кого то есть другие предложения как можно улучшить картинку?
  2. Как прикрутить OpenCV к билдеру?

    А как же быть с версией 2.2 ??
  3. Как прикрутить OpenCV к билдеру?

    Как скомпилировать OpenCV 2.2 для работы с С++Builder. ??
  4. cvSetImageROI

    У меня возникла проблема!Вот код: CvRect* r = (CvRect*)cvGetSeqElem( faces, j ); cvSetImageROI(gray,*r); if( !face_img_m ) face_img_m = cvCreateImage( cvSize(92,112), IPL_DEPTH_8U,1); if( !face_img ) face_img = cvCreateImage( cvSize(r->width,r->height), IPL_DEPTH_8U,1); if( !mean_img ) mean_img = cvCreateImage( Form_Vision_Single->size, IPL_DEPTH_32F, 1 ); cvCopyImage(face_img, gray); cvResize( face_img, face_img_m, CV_INTER_CUBIC ); cvEigenDecomposite( face_img_m, Form_Vision_Single->nEigens, Form_Vision_Single->eig_img,CV_EIGOBJ_NO_CALLBACK,0,mean_img,projectedTestFace); Вот cvEigenDecomposite не выполняет почему то происходит выход из процедуры после выполнения cvCopyImage... почему так? Помогите пожалуйста!
  5. cvSetImageROI

    как скопировать кусок чек картинки iplimage который я например определю в cvRect
  6. HBITMAP to IplImage*

    Не ужели никто не знает как нормально преобразовать Hbitmap в IplImage ??
  7. cvSetImageROI

    Может дело в том что я поигрался сначал с r: if (a>0) { // расширяем Х r->x-=-a/2; r->width+=a/2; } else { // сужаем Х r->x+=a/2; r->width-=a/2; } У меня задача такая. Я волучаю рект r. Мне его надо изменить в сооотвествии с пропорциями... потом выделенный r кусок изображения смаштабировать до 92 на 112. И после этого подать на распознание.. А тут получается что после cvResize я выхожу из процедуры почемуто..
  8. cvSetImageROI

    Спаибо исправил! После cvResize( face_img, face_img_m, CV_INTER_CUBIC ); выходит из процедуры! (( Может дело в cvSetImageROI(gray,*r); ??
  9. HBITMAP to IplImage*

    С памятью я разобрался!.. Это дело не в этой функции она хорошая.. Там были мои косяки.. тупо про картинку забыл )) На счет после использования достаточно удалить как обычную картинку cvReleaseImage.. HBITMAP я удаляю также
  10. HBITMAP to IplImage*

    и еще а есть функция чтобы наоборот IplImage -> Hbitmap.. ??
  11. HBITMAP to IplImage*

    вообще это функция она работала нормально у меня в старом проекте.. что изменилось в новом я не знаю..(( да кст, она оперативку жрет еще (( не много но жрет.. может вы найдете где, и как исправить..
  12. HBITMAP to IplImage*

    а как тогда объяснить что при cvsaveimage полученное изображение сохраняется полностью ???
  13. HBITMAP to IplImage*

    я пишу так: IplImage* hBitmap2Ipl(HBITMAP hBmp) { BITMAP bmp; ::GetObject(hBmp,sizeof(BITMAP),&bmp); int nChannels = bmp.bmBitsPixel == 1 ? 1 : bmp.bmBitsPixel/8; int depth = IPL_DEPTH_8U; IplImage* img = cvCreateImageHeader(cvSize(bmp.bmWidth, bmp.bmHeight), depth, nChannels ); cvCreateData(img); memcpy(img->imageData,(char*)(bmp.bmBits),bmp.bmHeight*bmp.bmWidth*nChannels*sizeof(char)); return img; } HBITMAP hbm = Image2->Picture->Bitmap->Handle; img_load2 = hBitmap2Ipl(hbm); cvFlip(img_load2,img_load2); но.. при его отрисовки через APIDrawIpl отрисовывается черное окно. при этом изображение там есть.. проверял, писал cvsaveimage.. все сохранило.. дело видимо в самом APIDrawIpl.. если есть идеи.. помогите
  14. IplImage to Bmp и обратно

    У меня вопрос. Как мне преобразовать формат изображений OpenCV в bmp. В интернете я нашел функции mycvGetImage и mycvShowImage. Но они не работают при вызове вылезает ошибка типа "Scan line index out of range". Может кто то уже сталкивался с этой проблемой??.. и у кого нить есть работающий пример??... Заранее спасибо..
  15. IplImage to Bmp и обратно

    С этим разобрался.. теперь не много другая проблема, вот смотрите: // инициализация IplImage* img_load; IplImage* test_img; CvSize size; //--------------------------------------- Graphics::TBitmap *Frame_Bitmap; Frame_Bitmap = (Graphics::TBitmap*) FrameBitmap; // переводим в формат HBITMAP hbm =Frame_Bitmap->Handle; BITMAP bmp; ::GetObject(hbm,sizeof(BITMAP),&bmp); int nChannels = bmp.bmBitsPixel == 1 ? 1 : bmp.bmBitsPixel/8; int depth = IPL_DEPTH_8U; img_load = cvCreateImageHeader( cvSize(bmp.bmWidth, bmp.bmHeight), depth, nChannels ); img_load->imageData =(char*)malloc(bmp.bmHeight*bmp.bmWidth*nChannels*sizeof(char)); memcpy(img_load->imageData,(char*)(bmp.bmBits),bmp.bmHeight*bmp.bmWidth*nChannels); cvFlip(img_load,img_load); // делаем серым test_img = cvCreateImage(cvSize(img_load->width,img_load->height),IPL_DEPTH_8U,1 ); cvCvtColor( img_load,test_img,CV_BGR2GRAY); APIDrawIpl(400,100,test_img,this->Handle); APIDrawIpl(400,300,img_load,this->Handle); [/codebox] в результате test_img отрисовывается, а вот на мместе img_load просто черный прямоугольник.. почему так? если сделать как в пролом посте то img_load отрисуется цветной картинкой..
  16. IplImage to Bmp и обратно

    а такой вопрос.. а функцией IplImage * img=cvCreateImage( cvSize(IMAGE_WIDTH,IMAGE_HEIGHT),IPL_DEPTH_8U, 1 ); - выделяется память под изображение или только создается указатель? просто я пишу так HBITMAP hbm = Image1->Picture->Bitmap->Handle; img_load = cvCreateImage(cvSize(Image1->Picture->Bitmap->Width,Image1->Picture->Bitmap->Height),IPL_DEPTH_8U,1 ); img_load=hBitmap2Ipl(hbm); мне кажется что cvCreateImage выделяте память под изображение, а потом в hBitmap2Ipl(hbm); еще раз оно выделяется , а в конце я удаляю только img_load .. а вторая копия остается в памяти.. подскажите как мне избавиться от этого..
  17. IplImage to Bmp и обратно

    дык я же должен возвратить из функции img зачем ее imageData удалять ??
  18. IplImage to Bmp и обратно

    я пробовал перед return написать delete &bmp; но ведь это удаляет только ссылку.. ((((
  19. IplImage to Bmp и обратно

    IplImage* hBitmap2Ipl(HBITMAP hBmp) { 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; IplImage* img = cvCreateImageHeader( cvSize(bmp.bmWidth, bmp.bmHeight) , depth, nChannels ); img->imageData = (char*)malloc(bmp.bmHeight*bmp.bmWidth*nChannels*sizeof(char)); memcpy(img->imageData,(char*)(bmp.bmBits),bmp.bmHeight*bmp.bmWidth*nChannels); return img; } [/codebox] здесь где то утечка памяти идет ......
  20. Rect

    В open cv есть функции чтбы определить пересекаются ли 2 Rect между собой и потом их объединить ? напимер так:
  21. Rect

    Написал. может кому понадобиться. CvRect rez_rect[1000]; int rez_count=0; - это результаты.. прямоуглоьики и кол-во прямоугольников void big_rect(CvRect rects[1000], int count) { CvRect i_rect; CvRect j_rect; CvRect big_rect; CvRect b; rez_count=0; int log_x=0; int log_y=0; int el=0; // î÷èñòêà for(int i=0;i<count;i++) { rez_rect.x=0; rez_rect.y=0; rez_rect.height=0; rez_rect.width=0; } Form1->Label2->Caption=IntToStr(count); if (count==1){ rez_rect[0]=rects[0]; rez_count++; log_x=0;log_y=0; // continue; } else { for (int i=0;i<count;i++) { log_x=0;log_y=0; big_rect=rects; // ñðàâíèâàåì ñ äðóãèìè for(int j=i+1;j<count;j++) { el=0; if ((big_rect.y<=rects[j].y)&&(big_rect.y+big_rect.height>=rects[j].y)) {log_y=1; big_rect.y<=rects[j].y ? b.y=big_rect.y : b.y=rects[j].y; big_rect.y+big_rect.height>=rects[j].y+rects[j].height ? b.height=big_rect.y+big_rect.height-b.y : b.height=rects[j].y+rects[j].height-b.y;} if ((big_rect.y<=rects[j].y+rects[j].height)&&(big_rect.y+big_rect.height>=rects[j].y+rects[j].height)) {log_y=1; big_rect.y<=rects[j].y ? b.y=big_rect.y : b.y=rects[j].y; big_rect.y+big_rect.height>=rects[j].y+rects[j].height ? b.height=big_rect.y+big_rect.height-b.y : b.height=rects[j].y+rects[j].height-b.y;} if ((big_rect.x<=rects[j].x)&&(big_rect.x+big_rect.width>=rects[j].x)) {log_x=1; big_rect.x<=rects[j].x ? b.x=big_rect.x : b.x=rects[j].x; big_rect.x+big_rect.width>=rects[j].x+rects[j].width ? b.width=big_rect.x+big_rect.width-b.x : b.width=rects[j].x+rects[j].width-b.x;} if ((big_rect.x<=rects[j].x+rects[j].width)&&(big_rect.x+big_rect.width>=rects[j].x+rects[j].width)) {log_x=1; big_rect.x<=rects[j].x ? b.x=big_rect.x : b.x=rects[j].x; big_rect.x+big_rect.width>=rects[j].x+rects[j].width ? b.width=big_rect.x+big_rect.width-b.x : b.width=rects[j].x+rects[j].width-b.x;} // åñëè åñòü ïåðåñå÷åíèÿ ïî x è y òî ñîçäàåì ðåêò if ((log_x==1)&&(log_y==1)) { big_rect=b; log_x=0;log_y=0; el=0; } } if (rez_count==0) { rez_rect[rez_count]=big_rect; rez_count++; log_x=0;log_y=0; } else { el=0; for(int k=0;k<rez_count;k++) { if ((rez_rect[k].y<=big_rect.y)&&(rez_rect[k].y+rez_rect[k].height>=big_rect.y)) {log_y=1;big_rect.y<=rez_rect[k].y ? b.y=big_rect.y : b.y=rez_rect[k].y; big_rect.y+big_rect.height>=rez_rect[k].y+rez_rect[k].height ? b.height=big_rect.y+big_rect.height-b.y : b.height=rez_rect[k].y+rez_rect[k].height-b.y;} if ((rez_rect[k].y<=big_rect.y+big_rect.height)&&(rez_rect[k].y+rez_rect[k].height>=big_rect.y+big_rect.height)) {log_y=1;big_rect.y<=rez_rect[k].y ? b.y=big_rect.y : b.y=rez_rect[k].y; big_rect.y+big_rect.height>=rez_rect[k].y+rez_rect[k].height ? b.height=big_rect.y+big_rect.height-rez_rect[k].y : b.height=rez_rect[k].y+rez_rect[k].height-b.y;} if ((rez_rect[k].x<=big_rect.x)&&(rez_rect[k].x+rez_rect[k].width>=big_rect.x)) {log_x=1;big_rect.x<=rez_rect[k].x ? b.x=big_rect.x : b.x=rez_rect[k].x; big_rect.x+big_rect.width>=rez_rect[k].x+rez_rect[k].width ? b.width=big_rect.x+big_rect.width-b.x : b.width=rez_rect[k].x+rez_rect[k].width-b.x;} if ((rez_rect[k].x<=big_rect.x+big_rect.width)&&(rez_rect[k].x+rez_rect[k].width>=big_rect.x+big_rect.width)) {log_x=1;big_rect.x<=rez_rect[k].x ? b.x=big_rect.x : b.x=rez_rect[k].x; big_rect.x+big_rect.width>=rez_rect[k].x+rez_rect[k].width ? b.width=big_rect.x+big_rect.width-b.x : b.width=rez_rect[k].x+rez_rect[k].width-b.x;} // åñëè åñòü ïåðåñå÷åíèÿ ïî x è y òî ñîçäàåì ðåêò if ((log_x==1)&&(log_y==1)) { rez_rect[k]=b; log_x=0;log_y=0; el=1; } } if (el==0) { rez_rect[rez_count]=big_rect; log_x=0;log_y=0; el=1; rez_count++; } } } } } елси у кого появтьися идеи по улучшению.. буду рад советам
  22. Шаблоны движения (motion templates)

    я просто хотел обозначить области в которых есть движение... для меня кртитична скорость.. и вполне достаточно програмы шаблона движения.. просто хотенлось этот хвост убрать.. я выставил историю равной 2 кадрам.. а круг изображений равным 10, чтоб объекты закрасились синим.. но.. я так и непонял почему у меня получилось 2 изображения.. если взять круг не 10 а 40 кадров, эти 2 изображения разойдуться.. но ведь историю я ставлю 2 изображения.. почему так получается..??
  23. Шаблоны движения (motion templates)

    Добрый день!. вопрос про шаблоны движения. Как мне укоротить хвост который идет за объектом. Я пробовал выставлять такие параметры const double MHI_DURATION = 0.1; const double MAX_TIME_DELTA = 0.1; const double MIN_TIME_DELTA = 0.05; const int N = 10; в результате получил как видите я получил как бы 2е копии машины.. как мне от этого избавиться ?
  24. я сделал все как написано в посте про svn. Это не дало результатов. Ошибки все теже. :-( :-( Empty_proj2.rar
  25. я использовал функцию с параметрами CvSeq* faces = cvHaarDetectObjects( gray, cascade, storage, 1.1, 10, 0 //|CV_HAAR_FIND_BIGGEST_OBJECT |CV_HAAR_DO_ROUGH_SEARCH |CV_HAAR_DO_CANNY_PRUNING |CV_HAAR_SCALE_IMAGE , cvSize(30, 30) ); методом проб и ошибок подобрал такие вот парметры. мин группируемые объекты поставил равным 10 хотя в примере он равен 2. Т.К. при не оч хорошей камере дает лишние объекты. И еще, если брать школное фото человек на 20. то время обработки на OpenCV 1.1 = иногда до 4,2сек.(среднее 0.3-0,6(если 1 лицо) и сильно возрастает если находит большее число лиц) а в примере из папки OpenCv 2.1 время обработки = 0,6 (и оно не зависит от кол-ва найденных лиц) очень хочетс я использовать библиотеку версии 2.1, но не знаю как.. Помогите советом..
×