再加300分,还是关于视频数据采集(300分)

  • 主题发起人 主题发起人 blacksnow
  • 开始时间 开始时间
B

blacksnow

Unregistered / Unconfirmed
GUEST, unregistred user!
我们厂需要用视频卡监视场地的作业情况,要求
1。动态的视频画面在自己程序的窗口内显示(比如在一个Panel或者Bevel)
不用视频卡本身的程序
2。可以随时将画面定格并且保存为jpg格式图像,然后继续动态显示图像。
3。用带sdk开发包和不带开发包的视频卡,各需要怎么做?
时间紧急,各位大虾赶快出手~~
另外如果讲解详细,分不问题~~~谢谢
本人email:blacksnow@yeah.net

 
1,看msdn,在search里输入video capture,看video capture 的帮助。
2,video capture里提供截取图像的函数,不过是bmp的,如果想弄成jpg的,装个
图像转换方面的控件或者什么的。
3,带不带开发包到不是很关键,只要符合微软的标准就成。可以用vfw进行编程。
这样的卡很多的,随便找一块就成。
 
不带开发包摸索起来周期要长一些
 

如果需要的话,我可以发一个最简单的例子给你,能完成你上面提出的所有要求。
但是是用BCB写的。写这么简单的应用不需要开发包,这样也会比较通用。
 
还是不要用开发包的好,这样容易使人变懒,而且遇到一些开发包自身的问题时很难解决。
 
各位,能否再详细一点,我第一次接触这个
 
//录制ACTIVEX中,供你参考,你也可以采用AVICAP 命令集
使用WIN API 的 MCI 函数集,原理是:
用mci将采集卡采来的一帧图放到剪贴板上,(你的程序上放image控件)利用
image提供的属性 把剪贴板上的图画到image上,你得放两个image,用timer控制
两个image交互显示(画好图的image显示,没画好的image不显示)。

以下是代码,供参考(别忘了给我加分哦)
--------------------------------------------------------------
unit Unit_mci;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ExtCtrls, MPlayer, mmsystem, ComCtrls, Clipbrd, Buttons,
ExtDlgs;

type
TForm1 = class(TForm)
Panel2: TPanel;
Panel1: TPanel;
StatusBar1: TStatusBar;
Image1: TImage;
SpeedButton1: TSpeedButton;
Timer1: TTimer;
Image2: TImage;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
sp_8_24: TSpeedButton;
SavePictureDialog1: TSavePictureDialog;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure sp_8_24Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton7Click(Sender: TObject);
procedure SpeedButton8Click(Sender: TObject);
private
cat_sp_24_8:boolean;
{ Private declarations }
public
procedure mci_SendString(command_str:pchar);
function PlayAviWindow(x_image_1,x_image_2:Timage):boolean;
procedure VideoLoad;
{ Public declarations }
end;

var
Form1: TForm1;

{$R cat_capture.res} //引用资源文件

implementation

uses Unit_mci_source, Unit_mci_change;

{$R *.DFM}

//-----------.* * 自定义函数/过程 * *.-------------------------
// *
// * 过程:mci_SendString(command_str:pchar)
// * 功能:封装 API -> MciSendString(...)
//API 原形(在 mmsystem.pas 中):
//function mciSendString(lpstrCommand, lpstrReturnString: PChar;
// uReturnLength: UINT; hWndCallback: HWND): MCIERROR; stdcall;
procedure TForm1.mci_SendString(command_str:pchar);
var
ret : Longint;
tstr : array[0..200] of char;
begin
ret := mciSendString(command_str,nil,0,0); // ?form1
//...
end;

function TForm1.PlayAviWindow(x_image_1,x_image_2:Timage):boolean; //自定义
begin
result := false;
StatusBar1.SimpleText := '播放视频……';
//
mci_sendstring('copy cat_mci'); //300x200
if Clipboard.HasFormat(CF_BITMAP)=true then
begin
if x_image_1.Visible=false then
begin
x_image_1.Picture.Assign(Clipboard);
x_image_2.Visible := false;
x_image_1.Visible := true;
end else begin
x_image_2.Picture.Assign(Clipboard);
x_image_1.Visible := false;
x_image_2.Visible := true;
end;
mci_SendString('unfreeze cat_mci');
//
result := true;
end;
end;

procedure TForm1.VideoLoad; //加载图象时初始化图象性质
begin
mci_Sendstring('freeze cat_Mci');
mci_SendString('SetVideo cat_mci bitsperpel to 24');
mci_Sendstring('unfreeze cat_Mci');
sp_8_24.Glyph.Handle := LoadBitmap(HInstance,'A_24_8');
sp_8_24.Hint := '转换成黑白图象';
end;

//==================================================

procedure TForm1.FormCreate(Sender: TObject);
begin
speedbutton2.Enabled := false;
speedbutton3.Enabled := false;
speedbutton4.Enabled := false;
speedbutton5.Enabled := false;
speedbutton6.Enabled := false;
sp_8_24.Enabled := false;
//
cat_sp_24_8 :=false;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
mci_SendString('close cat_mci');
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
mci_SendString('open overlay alias cat_mci');
VideoLoad;
timer1.enabled := true;
//
speedbutton2.Enabled := true;
speedbutton3.Enabled := true;
speedbutton4.Enabled := true;
speedbutton5.Enabled := true;
speedbutton6.Enabled := true;
sp_8_24.Enabled := true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if PlayAviWindow(image1,image2)=false then
application.MessageBox('播放视频失败。','MCI 设备',mb_ok+mb_iconStop);
end;

procedure TForm1.sp_8_24Click(Sender: TObject); // -- ok --
begin
mci_SendString('freeze cat_mci');
if cat_sp_24_8=false then
begin
mci_SendString('SetVideo cat_mci bitsperpel to 8');
sp_8_24.Glyph.Handle := LoadBitmap(HInstance,'A_8_24');
cat_sp_24_8 := true;
sp_8_24.Hint := '转换成彩色图象';
end else begin
mci_SendString('SetVideo cat_mci bitsperpel to 24');
sp_8_24.Glyph.Handle := LoadBitmap(HInstance,'A_24_8');
cat_sp_24_8 := false;
sp_8_24.Hint := '转换成黑白图象';
end;
mci_SendString('unfreeze cat_mci');
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
savePictureDialog1.Filter := '*.BMP|*.bmp+*.JPG|*.jpg';
savePictureDialog1.DefaultExt := 'BMP';
if SavePictureDialog1.Execute=true then
if image1.Visible=true then
image1.Picture.SaveToFile(SavePictureDialog1.filename)//'aa.bmp')
else
image2.Picture.SaveToFile(SavePictureDialog1.filename);//'aa.bmp');
end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
var
aa1:string;
aa2:array[0..127] of char;
reg01:TRegistry;
begin
form_change.Caption := '调节亮度和饱和度';
//
if form_change.ShowModal=mrok then
begin
mci_sendstring('freeze cat_mci');
//
aa1 := strpas('setvideo cat_mci brightness to ');
aa1 := aa1+form_change.Edit1.text;
strpcopy(aa2,aa1);
mci_SendString(aa2);
//
aa1 := strpas('setvideo cat_mci color to ');
aa1 := aa1+form_change.Edit2.text;
strpcopy(aa2,aa1);
mci_SendString(aa2);
//
mci_Sendstring('unfreeze cat_mci');
end;
end;

procedure TForm1.SpeedButton6Click(Sender: TObject);
var
aa1:string;
aa2:array[0..127] of char;
reg02:Tregistry;
begin
form_change.Caption := '调节对比度和色调值';
//
if form_change.ShowModal=mrok then
begin
mci_Sendstring('freeze cat_mci');
//
aa1 := strpas('setvideo cat_mci contrast to ');
aa1 := aa1+form_change.Edit1.text;
strpcopy(aa2,aa1);
mci_SendString(aa2);
//
aa1 := strpas('setvideo cat_mci tint to ');
aa1 := aa1+form_change.Edit2.text;
strpcopy(aa2,aa1);
mci_SendString(aa2);
//
mci_Sendstring('unfreeze cat_mci');
end;
end;

procedure TForm1.SpeedButton4Click(Sender: TObject);
var
aa1:string;
aa2:array[0..127] of char;
begin
if form_source.ShowModal=mrok then
begin
mci_Sendstring('freeze cat_mci');
//
aa1 := strpas('setvideo cat_mci number ')+form_source.aa;
strpcopy(aa2,aa1);
mci_Sendstring(aa2);
//
mci_Sendstring('unfreeze cat_mci');
end;
end;

end.
 
等我一下,我给你一个用DELPHI做的,功能完全符合上述要求,
只是存盘格式为BMP,不过这应该很容易改为存盘格式为JPG的。
到时记得给我加分:)
 
pengyt
等你的!
 
pengyt,快点啊,呵呵,我们科长崔的很急
分不是问题,你要多少?
 
需要的请将您的邮箱地址给我,因为比较大,贴不上来。

明天一起发。
 
我想要。chenqy1@sina.com
 
pengyt,谢谢你,我的邮箱blacksnow@yeah.net
 
多人接受答案了。
 
pengyt能不能也给我一份。
 
pengyt能不能也给我一份。 jitao@gzsums.edu.cn
 
to buff:
你的贴东东好象不全啊!

{$R cat_capture.res} //引用资源文件
这个cat_capture.res在哪儿找呢?

uses Unit_mci_source, Unit_mci_change;
说明还应该有两个form吧。应该放点什么东西在上面?

我对你的东东特别感兴趣,请不吝赐教好吗?
谢谢,我的email: lbdc@21cn.com.
 
这个问题,我做个好多的视频卡开发程序,可以做到你的所有要求,
我有程序,以上只是一段程序。
如果你的问题没有解决,在讨论
 
buff and pengyt ,我也有同样的问题,能提供给我吗?谢谢!test007@wx88.net
 
后退
顶部