Технический форум по робототехнике.
bez5tipro » 17 фев 2009, 21:21
Здравствуйте! пытаюсь реализовать "светофор" с помощью аналоговой камеры и пакета opencv встроенного в builder. Мне необходимо всего лишь разбить попиксельно изображение получаемое с камеры и выделить в нем красный и зеленый цвета. Я реализовал проблему пользуясь компонентом "TImage", но у меня не получается реализовать проблему опираясь на уже готовый пример "http://smorodov.narod.ru/Downloads/OpenCVProj/CirclesDetection.rar" спасибо большое создателю Смородову Андрею, в котором используется компонент "IplImage". пожалуйста подскажите как мне собственно попиксельно разбить картинку и выделить на ней допустим красный цвет используя пакет opencv, большое спасибо за внимание.
=DeaD= » 17 фев 2009, 21:31
Попиксельный доступ - читайте структуру IplImage.
Выделить красный - надо смотреть на практике, возможно надо будет каждый пиксель обработать простой функцией проверки на красный цвет типа RGB проверить на то, что R*K>G+B, где К - надо подбирать, например К=1.4
bez5tipro » 20 фев 2009, 15:17
спасибо))
EdGull » 20 фев 2009, 15:26
и пожайлуйста, перестаньте реализоывать проблемы...
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!!
=DeaD= » 20 фев 2009, 16:33
И?
GetPixel(image->imageSize->Handle,i,j);
imageSize какого типа?
bez5tipro » 24 фев 2009, 15:37
int
=DeaD= » 24 фев 2009, 15:48
Еще нужны подсказки?
и че за поле Handle у базового типа int?
bez5tipro » 24 фев 2009, 16:14
конечно же нужны...и при чем не одна простите за наглость)))
Добавлено спустя 9 минут 10 секунд:
убрал Handle
привел строку к следующему виду:
ColoredPixel = GetPixel(image, i, j);
больше этой ошибки не возникло, да и вообще никаких кроме:
[Link error] Unresolved external 'callback(_IplImage*)'refereced from "путь к файлу\myvideocapture.obj