roboforum.ru

Технический форум по робототехнике.

распознавание светофора используя opencv

распознавание светофора используя opencv

bez5tipro » 17 фев 2009, 21:21

Здравствуйте! пытаюсь реализовать "светофор" с помощью аналоговой камеры и пакета opencv встроенного в builder. Мне необходимо всего лишь разбить попиксельно изображение получаемое с камеры и выделить в нем красный и зеленый цвета. Я реализовал проблему пользуясь компонентом "TImage", но у меня не получается реализовать проблему опираясь на уже готовый пример "http://smorodov.narod.ru/Downloads/OpenCVProj/CirclesDetection.rar" спасибо большое создателю Смородову Андрею, в котором используется компонент "IplImage". пожалуйста подскажите как мне собственно попиксельно разбить картинку и выделить на ней допустим красный цвет используя пакет opencv, большое спасибо за внимание.

Re: распознавание светофора используя opencv

=DeaD= » 17 фев 2009, 21:31

Попиксельный доступ - читайте структуру IplImage.

Выделить красный - надо смотреть на практике, возможно надо будет каждый пиксель обработать простой функцией проверки на красный цвет типа RGB проверить на то, что R*K>G+B, где К - надо подбирать, например К=1.4

Re: распознавание светофора используя opencv

bez5tipro » 20 фев 2009, 15:17

спасибо))

Re: распознавание светофора используя opencv

EdGull » 20 фев 2009, 15:26

и пожайлуйста, перестаньте реализоывать проблемы... :D

Re: распознавание светофора используя opencv

bez5tipro » 20 фев 2009, 16:23

)))постараюсь проблемы больше не реализовывать и переключиться на идеи..)))

до совета =Dead= мое серое вещество выдало следующее:

Код: Выделить всёРазвернуть
Graphics::TBitmap*  IplToBMP (IplImage* _Grab);
void                DrawIpl  (TCanvas *Canv,IplImage* _Grab);
HBITMAP             CreateRGBBitmap(IplImage* _Grab);
void                APIDrawIpl (IplImage* _Grab,void *HANDLE);
void filter(IplImage* image)
{
for (int i=0; i<640; i=i+1)
{
for (int j=0; j<480; j=j+1)
{
Red1=false;
Green1=false;
ColoredPixel = GetPixel(image->imageSize->Handle,i,j);
Red=ColoredPixel&0xFF;
Green=(ColoredPixel>>8)&0xFF;
Blue=(ColoredPixel>>16)&0xFF;
if ((Red-RedGreen<Green) || (Red-RedBlue<Blue)) Red1=true;
if ((Green-GreenRed<Red) || (Green-GreenBlue<Blue)) Green1=true;
if (Red1==true && Green1==true) image->imageSize->Pixels[i][j]=clBlack;
}
}
};
#define WIDTHBYTES(bits) ((((bits) + 31) / 32) * 4)
float edge_thresh=200;
//----------------------------------------------------------------------------
void callback(IplImage* image, int X, int Y)       

double M=0;
CvMoments moments;
float* p;

if (do_something = 1)
{

ColoredPixel = GetPixel(image->imageSize->Handle,X,Y);
Red=ColoredPixel&0xFF;
Green=(ColoredPixel>>8)&0xFF;
Blue=(ColoredPixel>>16)&0xFF;
filter(image);

}



на что билдер выдал: pointer to structure required on left side of -> or -> *
на строку
ColoredPixel = GetPixel(image->imageSize->Handle,X,Y);
и подобныые ей

Добавлено спустя 27 минут 6 секунд:
Voon спасибо )))
Последний раз редактировалось Vooon 20 фев 2009, 16:14, всего редактировалось 2 раз(а).
Причина: Tag CODE!!

Re: распознавание светофора используя opencv

=DeaD= » 20 фев 2009, 16:33

И?

GetPixel(image->imageSize->Handle,i,j);

imageSize какого типа?

Re: распознавание светофора используя opencv

bez5tipro » 24 фев 2009, 15:37

int

Re: распознавание светофора используя opencv

=DeaD= » 24 фев 2009, 15:48

Еще нужны подсказки? :shock:

и че за поле Handle у базового типа int?

Re: распознавание светофора используя opencv

bez5tipro » 24 фев 2009, 16:14

конечно же нужны...и при чем не одна простите за наглость)))

Добавлено спустя 9 минут 10 секунд:
убрал Handle
привел строку к следующему виду:
ColoredPixel = GetPixel(image, i, j);
больше этой ошибки не возникло, да и вообще никаких кроме:
[Link error] Unresolved external 'callback(_IplImage*)'refereced from "путь к файлу\myvideocapture.obj


Rambler\'s Top100 Mail.ru counter