- •Задание на курсовую работу Содержание
- •Введение
- •Выбор и обоснование элементной базы
- •2. Структурная схема устройства
- •2.1. Блок схема устройства
- •2.2. Устройство usb web-камеры
- •2.3 Матрица web-камеры
- •2.4. Принцип действия web-камер
- •3. Структура алгоритма программы
- •3.1. Блок схема алгоритма программы
- •3.2. Описание алгоритма программы
- •4. Заключение
- •5. Список литературы
- •Приложение а.Текст программы
- •Interface
- •Implementation
- •Приложение б. Внешний вид программы
5. Список литературы
Радиотехника и электроника. (2010г). Claw.ru: техническая энциклопедия. Проверено 10:54, 18 ноября 2012 по http://tehno.claw.ru/shared/kinder/0330.htm
Как устроена web-камера. Проверено в 17:54, 18 ноября 2012 по http://www.web-kamera.ru/device/
Web-камеры http://www.coolreferat.com/Web-камеры
Мастера DELPHI http://www.delphimaster.ru/
Приложение а.Текст программы
Unit Unit1;
Interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,Menus,DSPack,DSUtil,DirectShow9,StdCtrls,ExtCtrls,MPlayer;
type
TForm1=class(TForm)
FilterGraph:TFilterGraph;
VideoWindow1:TVideoWindow;
Filter1:TFilter;
ComboBox1:TComboBox;
Label1:TLabel;
Image1:TImage;
Button1:TButton;
ButtonStopPlay:TButton;
Image2:TImage;
SampleGrabber1:TSampleGrabber;
Label3:TLabel;
Label4:TLabel;
CheckBox1:TCheckBox;
Timer1:TTimer;
Memo1:TMemo;
Label2:TLabel;
CheckBox2:TCheckBox;
MediaPlayer1:TMediaPlayer;
Procedure FormCreate(Sender:TObject);
Procedure ComboBox1Change(Sender:TObject);
Procedure Button1Click(Sender:TObject);
Procedure ButtonStopPlayClick(Sender:TObject);
Procedure Button3Click(Sender:TObject);
Procedure Button4Click(Sender:TObject);
Procedure Button5Click(Sender:TObject);
Procedure CheckBox1Click(Sender:TObject);
Procedure Timer1Timer(Sender:TObject);
private
public
end;
var
Form1:TForm1;
VideoDevice:TSysDevEnum;
Implementation
procedure TForm1.FormCreate(Sender:TObject);
var
i:integer;
begin
VideoDevice:=TSysDevEnum.Create(CLSID_VideoInputDeviceCategory);
If VideoDevice.CountFilters > 0 then
For i:=0 to VideoDevice.CountFilters-1 do
ComboBox1.Items.Add(VideoDevice.Filters[i].FriendlyName);
end;
procedure TForm1.ComboBox1Change(Sender:TObject);
begin
FilterGraph.ClearGraph;
FilterGraph.Active:=false;
//Задаем устройство с которым будем работать
Filter1.BaseFilter.Moniker:=VideoDevice.GetMoniker(ComboBox1.ItemIndex);
FilterGraph.Active:=true;
//Задаем что откуда будем получать и куда выводить
With FilterGraphasICaptureGraphBuilder2 do
RenderStream(@PIN_CATEGORY_PREVIEW,nil,Filter1asIBaseFilter,SampleGrabber1asIBaseFilter,VideoWindow1asIbaseFilter);
//Производим вывод изображения
FilterGraph.Play;
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
SampleGrabber1.GetBitmap(Image1.Picture.Bitmap);
end;
procedure TForm1.ButtonStopPlayClick(Sender:TObject);
begin
if ButtonStopPlay.Caption= ’Смотреть видео’ then
begin
FilterGraph.Play;
ButtonStopPlay.Caption:=‘Остановить видео’;
end
else
begin
FilterGraph.Stop;
ButtonStopPlay.Caption:='Смотреть видео’;
end;
end;
procedure TForm1.Button3Click(Sender:TObject);
var
//i-координата пикселя по горизонтали
i:integer;
//j-координата пикселя по вертикали
j:integer;
//Количество различий
k:integer;
begin
SampleGrabber1.GetBitmap(Image2.Picture.Bitmap);
k:=0;
//Если картинки разные по размеру, то смысла сравнивать нет,
//поэтому осуществляем выход
if (Image1.Picture.Bitmap.Width<>Image2.Picture.Bitmap.Width)
or (Image1.Picture.Bitmap.Height<>Image2.Picture.Bitmap.Height)
then
begin
ShowMessage(‘Картинки разные по размерам! Сравнение невозможно!');
exit;
end;
//Начинаем попиксельное сравнение
For i:=1 to Image1.Picture.Bitmap.Height do
begin
for j:=1 to Image1.Pictur e.Bitmap.Width do
begin
//Сравниваем пиксели обеих картинок между собой
Ifnot(Image1.Picture.Bitmap.Canvas.Pixels[i,j]=Image2.Picture.Bitmap.Canvas.Pixels[i,j])
Then k:=k+1;
//Даем поработать и другим программам
Application.ProcessMessages;
end;
end;
//Если различий нет то сообщаем об этом
If k=0 then ShowMessage(‘Картинки абсолютно идентичны’);
end;
procedure TForm1.Button4Click(Sender:TObject);
var
K,S:integer;
r,g,b:Byte;
Color:TColor;
begin
r:=GetRValue(K);
g:=GetGValue(K);
b:=GetBValue(K);
r:=GetRValue(S);
g:=GetGValue(S);
b:=GetBValue(S);
end;
procedure TForm1.Button5Click(Sender:TObject);
var
//i-координата пикселя по горизонтали
i:integer;
//j-координата пикселя по вертикали
j:integer;
//Количество различий
k:integer;
o:integer;
r,g,b:Byte;
Color:TColor;
S:integer;
begin
Image1.Picture.Bitmap.Monochrome:=true;
SampleGrabber1.GetBitmap(Image1.Picture.Bitmap);
exit;
//Количество различий
For i:=1 to Image1.Picture.Bitmap.Height do
For j:=1 to Image1.Picture.Bitmap.Width do
begin
K:=Image1.Picture.Bitmap.Canvas.Pixels[i,j];
r:=GetRValue(K);
g:=GetGValue(K);
b:=GetBValue(K);
b:=r;g:=r;
K:=RGB(r,g,b);
end;
end;
procedure TForm1.CheckBox1Click(Sender:TObject);
begin
if CheckBox1.CheckedthenTimer1.Enabled:=true
else Timer1.Enabled:=false;
end;
procedure TForm1.Timer1Timer(Sender:TObject);
var
//i-координата пикселя по горизонтали
i:integer;
//j-координата пикселя по вертикали
j:integer;
//Количество различий
k:integer;
r1,g1,b1:Byte;
r2,g2,b2:Byte;
FirstColor,SecondColor:Integer;
Color:TColor;
PriznakChange:byte;
begin
//Делаем первый снимок
If Timer1.Tag=0 then
begin
SampleGrabber1.GetBitmap(Image1.Picture.Bitmap);
Timer1.Tag:=1;
exit;
end;
//Через некоторое время второй, с которым будем сверять SampleGrabber1.GetBitmap(Image2.Picture.Bitmap);
Timer1.Tag:=0;
k:=0;
//Если картинки разные по размеру, то смысла сравнивать нет,
//поэтому осуществляем выход
if(Image1.Picture.Bitmap.Width<>Image2.Picture.Bitmap.Width)
or
(Image1.Picture.Bitmap.Height<>Image2.Picture.Bitmap.Height)
then
begin
//Картинки разные по размерам! Сравнение невозможно!'
exit;
end;
//Начинаем попиксельное сравнение
For i:=1 to Image1.Picture.Bitmap.Height do
begin
for j:=1 to Image1.Picture.Bitmap.Width do
begin
//Обнуляем признак изменения
PriznakChange:=0;
//Получаем цвет текущего пикселя первой картинки FirstColor:=Image1.Picture.Bitmap.Canvas.Pixels[i,j];
//Получаем составляющие RGB
r1:=GetRValue(FirstColor);
g1:=GetGValue(FirstColor);
b1:=GetBValue(FirstColor);
//Получаем цвет текущего пикселя второй картинки SecondColor:=Image2.Picture.Bitmap.Canvas.Pixels[i,j];
//Получаем составляющие RGB
r2:=GetRValue(SecondColor);
g2:=GetGValue(SecondColor);
b2:=GetBValue(SecondColor);
//Получаем составляющие RGB
If Abs(r1-r2)>20 then inc(PriznakChange);
If Abs(g1-g2)>20 then inc(PriznakChange);
If Abs(b1-b2)>20 then inc(PriznakChange);
//Начинаем проверку различий между двумя картинками
If PriznakChange=3 then k:=k+1;
//Если изменения существенные, то увеличиваем счетчик
Application.ProcessMessages;
end;
end;
//Даем поработать и другим программам
If k>2000 then
begin
Memo1.Lines.Add(FormatDateTime('hh:nn:ss',Now)+(‘зафиксированы изменения попериметру');
//Если изменений больше 2000 (значение получено экспериментальным путем) Image2.Picture.Bitmap.SaveToFile('log\'+FormatDateTime('hhnnss',Now)+'.jpeg');
If CheckBox2.Checked=true then
begin
MediaPlayer1.FileName:='C:\shvv\SIGNAL.wav';
MediaPlayer1.Open;
MediaPlayer1.Play;
end
else MediaPlayer1.Stop;
end;
end;
end.