![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем здрасти.
Хочу получить изображение с камеры и отслеживать передвижения объекта, точнее просто яркого пятна на изображении. Изображение получил, вывел на Panel ( код брал например отсюда http://ignatiev.su/blog/posts/webcam-borlanddelphi-7 ). Вся суть проблемы что у панели нету канваса, и мне не считать цвет пикселей. Сначало я решил эту проблему весьма плохо (дибильным способом). Скопировав изображения с канваса экрана и поместив его в image. но это конечно не годиться и впервую очередь для реализиции моей идеи. Идея состоит в том чтобы передвигать камеру-курсор в игре при помощи вебкамеры. Конечно это может оказаться не примелимым, но в теории более-менее может все работать. Единственный вопрос который меня сейчас беспокоит и кторый реально мне мешает: Как получить изображения с камеры на объект который ИМЕЕТ CANVAS, например в image, а не на panel? а все коды которые я находил в инете выводили изображение на панель |
#2
|
||||
|
||||
![]() Ну как вариант, можно выводить на форму. Там и хэндл есть и канва.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 19.01.2011 в 17:39. |
#3
|
||||
|
||||
![]() К панели можно "прицепить" канвас:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Panel1: TPanel; Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); procedure Panel1Click(Sender: TObject); procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; a: TControlCanvas; mp: TPoint; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin a := TControlCanvas.Create; a.Control := Panel1; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin a.Control := nil; a.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin with a do begin Brush.Color := clRed; RoundRect(10, 10, 50, 50, 5, 5); Brush.Color := clGreen; RoundRect(30, 30, 70, 70, 5, 5); Brush.Color := clBlue; RoundRect(50, 50, 90, 90, 5, 5); end; end; procedure TForm1.Panel1Click(Sender: TObject); begin ShowMessage(ColorToString(a.Pixels[mp.X, mp.Y])); end; procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin mp := Point(X, Y); end; end. Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#4
|
|||
|
|||
![]() Страдалецъ
у меня идет вывод видео на панель и я не знаю как сделать вывод на форму лили image, там где есть канвас dr. F.I.N. спасибо за подробное объяснение. я получил изображение с панели в image. у меня теперь проблема что все работает ровно до момента сворачивания формы, как только ее сворачиваеш ниче не работает копирую с панели в bmp Код:
bmp_p.Canvas.copymode := cmSrcCopy; pDC := GetDC(VideoPanel.Handle); pCanvas := TCanvas.Create; pCanvas.Handle := pDC; BitBlt(bmp_p.Canvas.Handle, 0, 0,320, 240, pDC, 0, 0, SRCCOPY); делаю изображение контрастнее: Код:
bmp2:=tbitmap.Create; bmp2.Assign(bmp_p); a:=False; Contrast(bmp_p,90,a); bmp2.Free; и нахожу требуемый цвет: Код:
for x := 120 to 280 do begin //261 for y := 50 to 150 do begin //221 if inttostr(bmp_p.Canvas.Pixels[x,y])='16777215' then begin //16777215 ... все работает более-менее, но работает, до того пока не свернул приложение Последний раз редактировалось Fox Mulder, 19.01.2011 в 23:31. |
#5
|
||||
|
||||
![]() Могу предложить использовать DSPack для работы с камерами, он немного сложнее по коду чем твой пример, но всё работает нормально при любых сворачиваниях формы. Полученные кадры можно без проблем отправить на любую канву. Копай в его сторону. У меня твоя задача работает и есть в коде, если нужно выложу, но нужно установить DSPack в Делфи.
Посмотри вложение, в нём простенький экзешник-детектора движения который работает с любой камерой, как с вэб так и с тюнером, правда не помню откуда его скачаивал. Проверь на сворачивание формы. |