CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

在delphi中如何获得摄像头捕捉的图象

楼主brucecheng(大老鼠)2002-04-23 09:54:28 在 Delphi / VCL组件开发及应用 提问

我要做一个和netmetting差不多的东东。可是在delphi中如何得到摄像头的图象呢?  
  有好的控件吗? 问题点数:50、回复次数:31Top

1 楼firstshine(黑里透红)回复于 2002-04-23 10:18:25 得分 0

摄像头应该有驱动,自己调用他的dll中的函数吧。Top

2 楼title(桶漆底脱)回复于 2002-04-23 10:25:06 得分 0

什么呀,你说的是什么呀,首先要看你用的是什么摄象头,是通过转接卡捕获图片的还是那种直接用USB的到图片的,还有应该有厂方提供的开发包只类的东西,支持二次开发的那种  
  Top

3 楼luyuhai(大海)回复于 2002-04-23 10:28:57 得分 10

如果是使用视频卡连接摄像头,可以在WWW.TORRY.NET下载到TVidCap控件,用于显示和抓拍图象。或者给我邮件地址,我发给你。Top

4 楼yan_hui(烟灰)回复于 2002-04-23 10:41:01 得分 0

sorry,我没说清楚,是用USB接口的电子眼。  
   
  TO   luyuhai:   多谢这位兄弟了,QQ:1214217,可以交流一下,不,应该是学习一下,呵!!!Top

5 楼yan_hui(烟灰)回复于 2002-04-23 10:52:06 得分 10

SORRY,我有点晕了,回自己的贴子居然回到别人头上了,呵呵,真是不好意思。  
   
  TO   BRUCECHENG:我也在做这方面的东西,留个联系方式交流一下吧!!Top

6 楼xdljf(hunter)回复于 2002-04-23 15:12:29 得分 0

通过图形采集卡,例如北京微视的Mini卡Top

7 楼good_student(好学生)回复于 2002-04-23 15:37:20 得分 10

我也正在做这方面的东西,我用的是数码相机。手上有一点资料,欢迎交流。email:guojingwan@sina.comTop

8 楼brucecheng(大老鼠)回复于 2002-04-24 12:37:58 得分 0

太好了,我在delphibbs上问了好几天了,没人理我:(  
  我的qq:26040636  
  mail:bruce.c2163.net  
  Top

9 楼brucecheng(大老鼠)回复于 2002-04-24 12:41:48 得分 0

我的QQ:26040636  
  EMAIL:bruce.c@163.net  
  欢迎交流。Top

10 楼brucecheng(大老鼠)回复于 2002-04-24 12:49:04 得分 0

大侠请问关于二次开发的东西厂商会无偿提供吗?  
  还有,如果我用USB的摄像头,程序是不是会简单点,就象前面的朋友说的那样,调用DLL就行了吗?Top

11 楼Larky(睡仙)回复于 2002-04-24 12:55:02 得分 0

需要用厂家的东西吗?难道netmeeting做了无数厂家的驱动?  
  不可能吧?我觉得有可能是windows提供了标准接口。Top

12 楼brucecheng(大老鼠)回复于 2002-04-24 13:08:46 得分 0

我想也是,可是那个接口在那呢?Top

13 楼inbud(清风侠)回复于 2002-04-24 13:41:35 得分 10

用DirectShow   中的硬件捕捉   WDM   CaptureTop

14 楼brucecheng(大老鼠)回复于 2002-04-25 09:23:04 得分 0

DIRECTX的封装有FOR   DELPHI6的吗?能不能给我发一个,谢谢。还有能不能副上一个说明,小弟还不会用那东西:)Top

15 楼An_Apple(我爱读书)回复于 2002-04-25 11:59:35 得分 10

参考一下  
  用VC++   5.0实现视频捕获编程    
    刘   涛   郭   戈   杨玉森    
   
    在桌面视频会议、可视电话等多媒体应用中,获得数字视频是一个关键的前提。在Video   for   Windows(VFW)   出现之前,捕获数字视频是一项极其复杂的工作。Microsoft   的Visual   C++自从4.0版就开始支持Video   for   Windows(简称VFW),这给视频捕获编程带来了很大的方便。关于多媒体应用开发,市面流行资料中介绍较多的是MCI(媒体控制接口),而本文着重介绍的是如何使用Visual   C++提供的AVICap窗口类进行视频捕获以及其中涉及到的概念和关键问题。    
   
    一、Video   for   Windows简介    
   
    VFW是Microsoft   1992年推出的关于数字视频的一个软件包,它能使应用程序数字化并播放从传统模拟视频源得到的视频剪辑。VFW的一个关键思想是播放时不需要专用硬件,为了解决数字视频数据量大的问题,需要对数据进行压缩。它引进了一种叫AVI的文件标准,该标准未规定如何对视频进行捕获、压缩及播放,仅规定视频和音频该如何存储在硬盘上,在AVI文件中交替存储视频帧和与之相匹配的音频数据。VFW给程序员提供.VBX和AVICap窗口类的高级编程工具,使程序员能通过发送消息或设置属性来捕获、播放和编辑视频剪辑。现在用户不必专门安装VFW了,Windows95本身包括了Video   for   Windows1.1,当用户在安装Windows时,安装程序会自动地安装配置视频所需的组件,如设备驱动程序、视频压缩程序等。    
   
    VFW主要由以下六个模块组成:    
   
    (1)AVICAP.DLL:包含了执行视频捕获的函数,它给AVI文件I/O和视频、音频设备驱动程序提供一个高级接口;    
   
    (2)MSVIDEO.DLL:用一套特殊的DrawDib函数来处理屏幕上的视频操作;    
   
    (3)MCIAVI.DRV:此驱动程序包括对VFW的MCI命令的解释器;    
   
    (4)AVIFILE.DLL:支持由标准多媒体I/O(mmio)函数提供的更高的命令来访问.AVI文件;    
   
    (5)压缩管理器(ICM):管理用于视频压缩-解压缩的编解码器(CODEC);    
   
    (6)音频压缩管理器ACM:提供与ICM相似的服务,不同的是它适于波形音频。    
   
    Visual   C++在支持VFW方面提供有vfw32.lib、   msacm32.lib   、winmm.lib等类似的库。特别是它提供了功能强大、简单易行、类似于MCIWnd的窗口类AVICap。AVICap为应用程序提供了一个简单的、基于消息的接口,使之能访问视频和波形音频硬件,并能在将视频流捕获到硬盘上的过程中进行控制。    
   
    二、AVICap编程简介    
   
    AVICap支持实时的视频流捕获和单帧捕获并提供对视频源的控制。虽然MCI也提供数字视频服务,比如它为显示.AVI文件的视频提供了avivideo命令集,为视频叠加提供了overlay命令集,但这些命令主要是基于文件的操作,它不能满足实时地直接从视频缓存中取数据的要求,对于使用没有视频叠加能力的捕获卡的PC机来说,用MCI提供的命令集是无法捕获视频流的。而AVICap在捕获视频方面具有一定的优势,它能直接访问视频缓冲区,不需要生成中间文件,实时性很强,效率很高。同时,它也可将数字视频捕获到文件。    
   
    在视频捕获之前需要创建一个捕获窗,所有的捕获操作及其设置都以它为基础。用AVICap窗口类创建的窗口(通过capCreateCaptureWindow函数创建)被称为“捕获窗”,其窗口风格一般为WS_CHILD和WS_VISIBLE。在概念上,捕获窗类似于标准控制(如按钮、列表框等)。捕获窗具有下列功能:    
   
    (1)将一视频流和音频流捕获到一个AVI文件中;    
   
    (2)动态地同视频和音频输入器件连接或断开;    
   
    (3)以Overlay或Preview模式对输入的视频流进行实时显示;    
   
    (4)在捕获时可指定所用的文件名并能将捕获文件的内容拷贝到另一个文件;    
   
    (5)设置捕获速率;    
   
    (6)显示控制视频源、视频格式、视频压缩的对话框;    
   
    (7)创建、保存或载入调色板;    
   
    (8)将图像和相关的调色板拷贝到剪贴板;    
   
    (9)将捕获的一个单帧图像保存为DIB格式的文件。    
   
    这里需要解释一下AVICap在显示视频时提供的两种模式:    
   
    (A)预览(Preview)模式:该模式使用CPU资源,视频帧先从捕获硬件传到系统内存,接着采用GDI函数在捕获窗中显示。在物理上,这种模式需要通过VGA卡在监视器上显示。    
   
    (B)叠加(Overlay)模式:该模式使用硬件叠加进行视频显示,叠加视频的显示不经过VGA卡,叠加视频的硬件将VGA的输出信号与其自身的输出信号合并,形成组合信号显示在计算机的监视器上。只有部分视频捕获卡才具有视频叠加能力。    
   
    除了利用捕获窗的九个功能外,灵活编写AVICap提供的回调函数还可满足一些特殊需求,比如将宏capCaptureSequenceNoFile同用capSetCallbackOnVideoStream登记的回调函数一起使用可使应用程序直接使用视频和音频数据,在视频会议的应用程序中可利用这一点来获得视频帧,回调函数将捕获的图像传到远端的计算机。应用程序可用捕获窗来登记回调函数(由用户编写,而由系统调用),以便在发生下列情况时它能通知应用程序作出相应的反应:    
   
    (1)捕获窗状态改变;    
   
    (2)出错;    
   
    (3)视频帧和音频缓存可以使用   ;    
   
    (4)在捕获过程中,其它应用程序处于让步(Yield)地位。    
   
    与普通SDK编程一样,视频捕获编程也要用到涉及视频捕获的结构、宏、消息和函数。让编程人员感到轻松的是,发送AVICap窗口消息所能完成的功能都能调用相应的宏来完成。例如,SendMessage(hWndCap,WM_CAP_DRIVER_CONNECT,0,0L)   与capDriverConnect(hWndCap,0)的作用相同,都是将创建的捕获窗同视频输入器件连接起来。    
   
    在利用AVICap编程时,应该熟悉与视频捕获相关的结构,下面对常用的四个结构作一简要介绍,对于前三个结构都有对应的函数来设置和获得结构包含的信息:    
   
    (1)CAPSTATUS:定义了捕获窗口的当前状态,如图像的宽、高等;    
   
    (2)CAPDRIVERCAPS:定义了捕获驱动器的能力,如有无视频叠加能力、有无控制视频源、视频格式的对话框等;    
   
    (3)CAPTUREPARMS:包含控制视频流捕获过程的参数,如捕获帧频、指定键盘或鼠标键以终止捕获、捕获时间限制等;    
   
    (4)VIDEOHDR:定义了视频数据块的头信息,在编写回调函数时常用到其数据成员lpData(指向数据缓存的指针)和dwBufferLength(数据缓存的大小)。    
   
    三、AVICap编程示例    
   
    下面以一个简单的应用程序为例说明AVICap的使用,该程序对输入的视频流进行实时的显示和捕获,演示需要一个视频捕获卡和摄像头。界面中的菜单项如图1所示。其中,菜单项Display可以以Preview   或Overlay模式显示图像;菜单项Setting可通过弹出AVICap提供的对话框Video   Source、Video   Format和Video   Display来对捕获进行设置,图4   中的图像就是按照图2、图3的对话框所示进行设置、以Preview模式显示的结果;菜单项Capture可将视频流或单帧图像捕获到指定的文件中去。    
   
    图1   菜单项    
   
    图2   Video   Format对话框    
   
    图3   Video   Source对话框    
   
    图4   图2和图3设置下显示的一帧图    
   
    由于篇幅有限,下面仅介绍与视频捕获相关的编程。    
   
    1、定义全局变量:    
   
    HWND   ghWndCap   ;   //捕获窗的句柄    
   
    CAPDRIVERCAPS   gCapDriverCaps   ;   //视频驱动器的能力    
   
    CAPSTATUS   gCapStatus   ;   //捕获窗的状态    
   
    2、处理WM_CREATE消息:    
   
    //创建捕获窗,其中hWnd为主窗口句柄    
   
    ghWndCap   =   capCreateCaptureWindow((LPSTR)"Capture   Window",WS_CHILD   |   WS_VISIBLE,   0,   0,   300,240,   (HWND)   hWnd,   (int)   0);    
   
    //登记三个回调函数,它们应被提前申明    
   
    capSetCallbackOnError(ghWndCap,   (FARPROC)ErrorCallbackProc);   capSetCallbackOnStatus(ghWndCap,   (FARPROC)StatusCallbackProc);   capSetCallbackOnFrame(ghWndCap,   (FARPROC)FrameCallbackProc);    
   
    capDriverConnect(ghWndCap,0);   //   将捕获窗同驱动器连接    
   
    //获得驱动器的能力,相关的信息放在结构变量gCapDriverCaps中    
   
    capDriverGetCaps(ghWndCap,&gCapDriverCaps,sizeof(CAPDRIVERCAPS))   ;    
   
    3、处理WM_CLOSE消息:    
   
    //取消所登记的三个回调函数    
   
    capSetCallbackOnStatus(ghWndCap,   NULL);    
   
    capSetCallbackOnError(ghWndCap,   NULL);    
   
    capSetCallbackOnFrame(ghWndCap,   NULL);    
   
    capCaptureAbort(ghWndCap);//停止捕获    
   
    capDriverDisconnect(ghWndCap);   //将捕获窗同驱动器断开    
   
    4、处理菜单项Preview:    
   
    capPreviewRate(ghWndCap,   66);   //   设置Preview模式的显示速率    
   
    capPreview(ghWndCap,   TRUE);   //启动Preview模式    
   
    5、处理菜单项Overlay:    
   
    if(gCapDriverCaps.fHasOverlay)   //检查驱动器是否有叠加能力    
   
    capOverlay(ghWndCap,TRUE);   //启动Overlay模式    
   
    6、处理菜单项Exit:    
   
    SendMessage(hWnd,WM_CLOSE,wParam,lParam);    
   
    7、分别处理Setting下的三个菜单项,它们可分别控制视频源、视频格式及显示:    
   
    if   (gCapDriverCaps.fHasDlgVideoSource)    
   
    capDlgVideoSource(ghWndCap);   //Video   source   对话框    
   
    if   (gapDriverCaps.fHasDlgVideoFormat)    
   
    capDlgVideoFormat(ghWndCap);   //   Video   format   对话框    
   
    if   (CapDriverCaps.fHasDlgVideoDisplay)    
   
    capDlgVideoDisplay(ghWndCap);   //   Video   display   对话框    
   
    8、处理Video   Stream菜单项,它捕获视频流到一个.AVI文件:    
   
    char   szCaptureFile[]   =   "MYCAP.AVI";    
   
    capFileSetCaptureFile(   ghWndCap,   szCaptureFile);   //指定捕获文件名    
   
    capFileAlloc(   ghWndCap,   (1024L   *   1024L   *   5));   //为捕获文件分配存储空间    
   
    capCaptureSequence(ghWndCap)Top

16 楼brucecheng(大老鼠)回复于 2002-04-27 10:10:42 得分 0

呵呵,谢谢各位兄弟了。我已经找到解决的方法了。  
  如果有需要的话,留个地址,我给你发过去。  
   
  现在还有困难的就是视频的压缩了。Top

17 楼WtusmChenWF(陈愚)回复于 2002-04-27 10:21:27 得分 0

告诉我一声:chensh@capinfo.com.cnTop

18 楼Larky(睡仙)回复于 2002-04-27 12:58:57 得分 0

millionyj@263.net  
  多谢了!Top

19 楼kyo_wang(踏雪无痕)回复于 2002-04-27 16:44:48 得分 0

wang_98sw@263.netTop

20 楼dtrczx(流星雨)回复于 2002-04-27 22:02:51 得分 0

发给我一份吧  
  dtrczx@sina.comTop

21 楼brucecheng(大老鼠)回复于 2002-04-28 10:04:32 得分 0

好了,我都发了。现在谁能帮我解决视频压缩传输呀。Top

22 楼Noth_wind()回复于 2002-04-28 10:50:53 得分 0

大哥也给我一份吧  
  noth_wind@163.comTop

23 楼smilboy(笨笨熊)回复于 2002-06-11 18:52:07 得分 0

大哥也给我一份吧  
  liren.z@163.comTop

24 楼arte(我要学习)回复于 2002-06-26 11:17:23 得分 0

我急切的需要!!!  
  chenxy@seg.nju.edu.cnTop

25 楼knightlzf()回复于 2002-06-26 11:23:51 得分 0

我也急切需要,希望你能给我一份,万分感谢!!!  
  我的email:knightlzf@163.net  
  你可以去我发布的帖子上拿分  
  http://www.csdn.net/Expert/TopicView1.asp?id=830622Top

26 楼Un1()回复于 2002-06-26 11:25:34 得分 0

这里有控件和源码:  
   
  http://www.banasoft.net/AVPhone.htmTop

27 楼xzhongjin(无聊的很)回复于 2002-06-26 11:39:23 得分 0

很有人气嘛,关注一下Top

28 楼brucecheng(大老鼠)回复于 2002-07-15 10:56:29 得分 0

很不好意思,回学校了一段时间,没过来看。上面的几位我已经都发了。Top

29 楼lwk_hlj(阿凯(学习oralce中))回复于 2002-07-15 13:33:07 得分 0

我也想要!  
  lwk0271_cn@sina.comTop

30 楼brucecheng(大老鼠)回复于 2002-07-16 09:11:15 得分 0

同志们关注一下我的问题好不好。我想问如何解决传输的问题。Top

31 楼brucecheng(大老鼠)回复于 2002-07-30 09:12:37 得分 0

散分:)Top

32 楼xiao_pei2001(昨夜渡轮上)回复于 2002-08-12 20:13:03 得分 0

救命  
  我也想要  
  大虾救命:xiao_pei2000@21cn.com  
                      xiao_pei2001@21cn.comTop

相关问题

  • 捕获摄像头图象
  • 摄像头--视频捕捉
  • 求助,关于摄像头比较图象的问题。
  • 怎样实现从摄像头中取出图象文件????
  • 关于利用数字摄像头捕捉图像
  • linux下如何做摄像头的图像捕捉!
  • 捕捉摄像头图像时出现的问题
  • 在VB中如何控制摄像头进行图象的抓拍?
  • 急求摄像头采集到的位图图象保存的代码!!!
  • 怎么对摄像头拍摄到的图象进行视频实时压缩?

关键词

  • .net
  • visual c++
  • 函数
  • 音频
  • 应用程序
  • 文件
  • 图像
  • 模式
  • 数据
  • 结构

得分解答快速导航

  • 帖主:brucecheng
  • luyuhai
  • yan_hui
  • good_student
  • inbud
  • An_Apple

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo