Jump to content
Compvision.ru

tybik

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

    70
  • Joined

  • Last visited

Community Reputation

0 Новичек

About tybik

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

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

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

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

    Не ужели никто не знает как нормально преобразовать Hbitmap в IplImage ??
  6. 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 я выхожу из процедуры почемуто..
  7. cvSetImageROI

    Спаибо исправил! После cvResize( face_img, face_img_m, CV_INTER_CUBIC ); выходит из процедуры! (( Может дело в cvSetImageROI(gray,*r); ??
  8. 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... почему так? Помогите пожалуйста!
  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 и обратно

    С этим разобрался.. теперь не много другая проблема, вот смотрите: // инициализация 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 отрисуется цветной картинкой..
  15. 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 .. а вторая копия остается в памяти.. подскажите как мне избавиться от этого..
×