![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |
|
#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 в Делфи.
Посмотри вложение, в нём простенький экзешник-детектора движения который работает с любой камерой, как с вэб так и с тюнером, правда не помню откуда его скачаивал. Проверь на сворачивание формы. |