• 驱动摄像头的三种方式


    备注:本文部分解决方案来自互联网,本文仅作为自己学习笔记,不存在任何商业目的

    进来研究把硬件摄像头驱动起来,得到3种方法:VFWDirectShowOpenCV

    下面依次对3种方法进行记录。

    首先先对VFWDirectshow进行区别对比:

    为了支持多媒体信息的采集、压缩、解压和回放,在Windows中,微软提供了两种多媒体开发框架:一种是Video For Windows(简称VFW),另一种是DirectShow。VFW是Microsoft于1992年推出的关于数字视频的一个软件包,VFW给视频处理带来了较大的便利,它能把模拟视频转换为数字信号并进行播放,VFW的主要特点是视频采集是与设备无关的。DirectShow是微软公司推出的新一代基于COM的多媒体开发包,它主要负责在Internet网上音频和视频流的捕捉和回放,它解决了以前16位的媒体控制接口(MCI)先天受到很多限制的难题,采用组件对象模型(COM),使原有MCI接口不一致的问题,在采用多线程多任务的DirectShow以后成为历史,它还支持宽松的格式变化,包括高级流格式(ASF),Motion Picture Experts Group(MPEG)以及AVI和WAV文件等。由于DirectShow支持多种音视频编解码器和多种媒体类型,加之DirectShow可以提供高品质的媒体流解码和回放,为播放视频监控中涉及到的各种类型的音频、视频数据提供了非常有效的途径。VFW使用简单、方便,但可控制性差,因此本系统采用DirectShow进行开发,以便于灵活、方便地操作硬件并获得各种需要的视频数据。

    一、VFW,全称Video For Windows

    在应用开发时,需要引入头文件vfw.h头文件(注:在开发插件如OCX时还需要引入lib库

    #include "Vfw.h"

    #pragma  comment (lib"vfw32.lib")

    驱动摄像头主要有几个关键点:

    HWND m_hVideo;//窗口显示句柄

    m_hVideo=::capCreateCaptureWindow("Me",WS_CHILD | WS_VISIBLE,0,0,500,500,m_hWnd,0);

    capGetDriverDescription(0,szDeviceName,sizeof(szDeviceName),szDeviceVersion,

    sizeof(szDeviceVersion));//获取摄像头驱动

     

    capDriverConnect(m_hVideo,0);//连接摄像头

    capPreviewRate(m_hVideo,40);//设置Preview模式的显示速率

    capPreview(m_hVideo,TRUE);//启动Preview模式

    开发时出现了一个问题纠结了很久:

    问题:摄像头第一次运行程序正常,能正常显示,但当关闭程序,再次运行便不在做出任何反应,跟了很久,发现由于开发机操作系统的不同,问题的现象会有所不同,在win7和windows service操作系统上,上面接口中的capGetDriverDescription有时候需要多次调用才能成功。

    char szDeviceName[80];

    char szDeviceVersion[80];

    int nRet = 5;

    BOOL bRet = 0;

    while(nRet)

    {

    bRet = capGetDriverDescription (0,szDeviceName,sizeof(szDeviceName), 

    szDeviceVersion,sizeof(szDeviceVersion));

    if (bRet)

    {

    nRet = 0;

    }

    else

    {

    nRet--;

    }

    }

    if ((nRet==0) && (bRet==0))

    {

    AfxMessageBox("摄像头连接失败!);

    }

    需要注意的点:nRet一定要设定一个合适的数值,不能无限大,要不然如果在测试机上没有摄像头或者驱动连接不成功会导致一直去试连,严重的话导致开发机卡死、崩溃,毕竟CPU占用率达到100%

     

    二、DirectShow

    先介绍步骤:

    1、安装包iso镜像文件:DirectShow SDK下载

    别小看了这个步骤,不一样的安装包安装出来不一定是你想要的。

    由于现在directShow没有和direcxtx一起发布,而是和windows sdk 打包发布了,可以到官网下载最新的windows sdk 开发包。

      下载DirectShow(实际上是下载最新的windows sdk

      由于现在directShow没有和direcxtx一起发布,而是和windows sdk 打包发布了,可以到官网下载最新的windows sdk 开发包。windows sdk 地址:http://www.microsoft.com/download/en/details.aspx?id=8442按系统类型下载。

      GRMSDK_EN_DVD.iso x86

      GRMSDKIAI_EN_DVD.iso Itanium

      GRMSDKX_EN_DVD.iso 64位的amd cpu

      如果你安装的是32位的windows 7,请下载x86

      如果你安装的是64位的windows 7,请下载amd64

      配置DirectShow

      下载安装好之后编译baseclasses项目,在C:Program FilesMicrosoft SDKsWindowsv7.1Samplesmultimediadirectshowaseclasses.以管理员身份选择不同的编译环境 (Debug,Debug_MBCS,Release,Release_MBCS)可以得到四个类型的strmbasd.lib,开发项目时选择相应Debug版本的strmbasd.lib.

    在项目中包含(1.选择任意项目2.切换到属性管理器3.点击Debug/Release里的Microsoft.Cpp.Win32.user)

    C:Program FilesMicrosoft SDKsWindowsv7.1Include

    C:Program FilesMicrosoft SDKsWindowsv7.1Samplesmultimediadirectshowbaseclasses


    C:Program FilesMicrosoft SDKsWindowsv7.1Samplesmultimediadirectshowcommon


    以及lib:

    C:Program FilesMicrosoft SDKsWindowsv7.1Lib

    C:Program FilesMicrosoft SDKsWindowsv7.1SamplesmultimediadirectshowbaseclassesDebug


    C:Program FilesMicrosoft SDKsWindowsv7.1SamplesmultimediadirectshowaseclassesRelease




    也可以把DebugRelease目录下生成的strmbase.libstrmbasd.lib拷贝到C:Program FilesMicrosoft SDKsWindowsv7.1Lib目录下,就不需要包含后面DebugRelease目录了。

     

    2、安装开发库

    下载好了镜像文件,当然是开始安装了。

    本来安装一个软件没什么大不了的,但是当安装出现报错,就是一个问题了。

    安装Microsoft Windows SDK 7.1时出现的错误(附解决办法)

    错误回放一:

    A problem occurred while installing selected Windows SDK components.

    Installation of the "Microsoft Windows SDK for Windows 7 Compilers for x86" product has  reported the following error: 安装时发生严重错误

    Please attempt to resolve the problem and then start Windows SDK setup again. If you continue to have problems with this issue, please visit the SDK team support page athttp://go.microsoft.com/fwlink/?LinkId=130245.Click the View Log button to review the installation log.

    To exit, click Finish.

    解决办法:

    安装SDK ver7.1时不要勾选Visual C++ compiler,装完后安装KB2519277

    错误回放二:

    A problem occurred while installing selected Windows SDK components.

    Installation of the "Microsoft Windows SDK for Windows 7" product has reported the f ollowing error: Please refer to SamplesSetupHTMLConfigDetails.htm document for  further information.

    Please attempt to resolve the problem and then start Windows SDK setup again. If you continue to have problems with this issue, please visit the SDK team support page athttp://go.microsoft.com/fwlink/?LinkId=130245.Click the View Log button to review the installation log.

    To exit, click Finish.

    解决办法:

    卸载Visual C++ 2010 Redistributable

    其它错误解决方法:

    如果还不行的话,就一个一个安装,先勾第一个选项,装完,再勾第二个,这样。

    或者打开iso目录,把setup文件夹里的各个文件夹里的安装包安装一遍。

    3、包含头文件Qedit.h,执行文件Qedit.dll,包含库文件strmbase.lib

    1)、首先要解决的问题是头文件Qedit.h

    这个文件之前我一直以为是DirectShow SDK库装了后就有了,因为之前在网上搜索的时候,大家都说需要装DirectShow SDK,但是装了才发现其实还是没有,最终还是去网上下了个,含进工程,但编译时发现还是编译不过。究其原因,发现还需要Qedit.dll

    (2)、解决执行文件Qedit.dll

    在系统盘进行全盘搜索发现确实存在Qedit.dll文件,但个人的解决方案还是从网上重新下载了一个,然后注册。

    第一步:找到qedit.dll文件,直接将qedit.dll文件复制到C:/windows/systerm32系统文件夹下面。(备注:如果操作系统为64位,则复制文件到C:/windows/sysWOW64目录下

    第二步:然后点击“开始”>>“运行”,输入“regsvr32 qedit.dll“, 将qedit.dll注册入注册表。如下图

    点击“确定”后,qedit.dll导入注册表成功即可

    3)、解决库文件strmbase.lib

    上面已经说过,不再赘述。

     

    三、OpenCV

    下次再说了- -!!

  • 相关阅读:
    为什么ip层收到的报文可能已经设置了路由
    由socket fd泄漏想到的一些问题
    Html.DropDownLis绑定数据库
    CSS 属性备注
    获取IP
    读取TXT并筛选数据写入新建TXT
    C#打印图片
    C#生成二维码
    NPOI操作Excel
    Bootstrap
  • 原文地址:https://www.cnblogs.com/SunkingYang/p/11049250.html
Copyright © 2020-2023  润新知