“油管”怎么说?看看苹果、谷歌和网易有道如何翻译对话
06-21
0简介 目前以CCD技术为核心的图像采集设备可分为两类: 1)由CCD相机、图像采集卡组成图像采集系统利用图像采集卡将CCD传来的模拟图像信号转换为数字图像信号并传输至计算机进行处理; 2)CCD摄像机本身的数字设备直接将数字图像信号通过端口传输到计算机。
前者作为经典的图像采集系统,在图像采集应用中一直处于主导地位[1]。
但性能较好的采集卡价格昂贵,而且由于需求不同,往往需要对采集卡进行二次开发。
并且大多数采集卡厂家都封装了自己的功能和链接库,因此在二次开发时对开发人员的专业素质要求较高。
近年来,随着CCD相机技术的不断进步,以数码相机为代表的第二类图像采集设备以其使用方便、采集速度快、分辨率高、性价比高等优点受到了广泛关注,并已被应用于一些领域。
取得了很好的应用效果。
对于第二类图像采集设备,由于CCD相机直接提供数字信号,可以获得高质量的图像,但同时也对图像数据的传输速率提出了更高的要求。
一般来说,CCD输出可以遵循RS-、RS-和IEEE等数字输出接口标准。
其中RS-的数据传输速率较低,无法满足传输大量图像数据的要求; RS-在传输数据时必须添加图像采集卡,增加了整个系统的成本。
IEEE不仅可以提供高速数据速率,克服RS-数据传输速率低的缺点,而且在连接CCD时不需要外部图像采集卡[2]。
IEEE,也称为FireWire,是苹果公司于2016年发布的高速串行总线标准。
该标准于2007年被电气和电子工程师协会(IEEE)采用,简称IEEE。
1999年IEEE的数据传输速率为 //Mbps。
后来其改进版本IEEEb的数据传输速率可以达到Mbps、1.6Gbps和3.2Gbps。
因此,IEEE总线是迄今为止最快的串行总线[3]。
IEEE总线具有以下特点: (1)数字接口:数据以数字形式传输,无需数模转换,从而降低了设备的复杂度,保证了信号质量; (2)即插即用; (3)速度快,支持同步和异步数据传输模式; (4)物理尺寸小,制造成本低,易于安装; (5)便宜。
基于这些特点,它被广泛应用于多媒体领域,尤其是数码相机领域。
目前接触最多的是图像采集卡的编程控制,而对于使用第二类图像采集设备进行图像采集的编程方法却很少介绍。
因此,本文重点讨论在VC++平台下使用第二类基于接口的图像采集设备进行图像采集的编程过程。
1 图像采集系统的硬件组成及开发平台 本文中图像采集的硬件组成:工业数码相机、B卡和PC。
将系统所需的B卡安装在PC主机空闲的PCI插槽中,通过接口将摄像机与PC连接并安装驱动程序。
这样,系统所需的硬件环境就完成了。
使用的系统平台为Windows,开发环境为Microsoft VC+.0。
2 图像采集的实现 图像采集系统的编写,主要内容包括:人机交互界面、接收并保存来自CCD相机的图像信号、在采集界面上显示图像以及控制相机。
下面将对其进行一一解释。
2.1 建立采集界面 采集界面可以以对话框的形式创建,也可以以文档结构的形式创建。
本文使用后者: 1)生成一个MFC AppWizard(exe)多文档应用程序框架(应用程序名称:PictureTest)。
2)连接相机的动态链接库(因为需要控制相机拍照,所以会用到相机的库函数)。
找到相机安装的目录文件,将include文件夹的文件路径添加到Project->Setting->C/C++->;preprocessor->Additional includedirectories的编辑框中;将lib文件夹的文件路径添加到Project->Setting->Link->Input->Additionallibrarypath编辑框,并在...->Input->Object/librarymodules编辑中输入pgrflycapture.lib pgrflycapturegui.lib盒子。
3) 包含相机控制类的头文件。
在工程中的CPictureTestDoc.h文件中添加头文件: #include #include 并定义公共变量: FlyCaptureContext context; //相机函数句柄 CameraGUIContext m_guicontext; //图形用户界面(GUI)句柄 4)使用相机拍照时,首先需要对其进行初始化。
我们希望这部分工作在应用程序打开时由系统自己完成。
在项目中的CPictureTestDoc.cpp文件中初始化相机: 首先在构造函数中初始化定义的函数句柄: context=NULL; //相机函数句柄初始化 m_guicontext=NULL; //图像用户界面句柄初始化 然后,连接相机并在OnNewDocument()函数中初始化: flycaptureCreateContext ( &context ); // 连接相机 guierror=pgrcamguiCreateContext ( &m_guicontext ); // 创建GUI连接 flycaptureInitialize(context, _CAMERA_INDEX);//相机初始化 2.2图像捕获 在一些自动化系统中,捕获代码可能会在多个地方使用,所以为了增强可读性程序的,reduce编程代码中,我们编写了一个功能函数来完成捕获和保存功能,这样在需要的时候,可以直接调用该函数。
在CPictureTestDoc.cpp文件中添加函数PictureGrab(),并使用它来实现图像捕获。
核心代码如下: flycaptureStart( context, FLYCAPTURE_VIDEOMODE_ANY, FLYCAPTURE_FRAMERATE_ANY ); // 相机开启,其中三个参数分别为:相机函数句柄、视频模式、帧率 flycaptureGrabImage2 ( context, &image ); // 捕获,image为图像在内存中的存储地址 flycaptureConvertImage ( context, &image, &imageConverted ) ;//图像格式转换,imageConverted为转换后的图像在内存中的地址 flycaptureSaveImage (context,&imageConverted ) , ("TestPicture.bmp"), SAVE_FORMAT_C );//保存图像,TestPicture.bmp为图像保存名称,SAVE_FORMAT_C为图像保存格式,即BMP格式 FlycaptureStop(context);//停止摄像头 通过上述程序捕获的图像保存在项目文件夹中,以便后续图像处理时,可以直接通过程序中的文件名访问该图像文件,并且不需要添加路径,简化了程序代码。
2.3 图像显示 Windows 位图有两种类型:DDB 和DIB。
前者依赖于设备(Device Dependent Bitmap),后者对应MFC 6.0中的CBitmap类。
它们在内存中的结构和位置取决于管理它们的设备驱动程序。
DIB是一种“格式”,可以存储在内存中,也可以作为文件存储,也就是常见的BMP文件。
在Visual C++的MFC中,CBitmap类代表了DDB图像,这极大地方便了程序员对DDB的使用。
不过,通常情况下,没有人会将DDB图像存储为文件,所以我们更多地使用DIB。
不幸的是,MFC几乎不支持DIB。
因此,在编写图像处理程序时,需要设计专门用于处理DIB的可重用类CDib[4](对于CDib,读者可以参考相关书籍,本文不再赘述)。
本文为了方便后续的图像处理,在图像显示方面采用了类似CDib的技术。
因为在实际应用中,我们经常需要连续读入图像,本文直接使用文件名读入图像,从而可以实时显示采集到的图像。
首先定义类CDib,并在CPictureTestDoc.h中定义公共变量: CDib m_dib;//CDib类对象,用于读写位图文件 然后,在CPictureTestDoc.cpp文件中添加函数:PictureRead(),在其中添加代码: CString strPathName; strPathName = _T ("TestPicture.bmp"); if (m_dib.Read(strPathName) == TRUE) | CPictureTestDoc*pDoc = GetDocument(); CDib *pDib = pDoc->GetPDib(); //返回m_dib的指针 CSize sizeFileDib = pDib->GetDimensions(); //获取DIB的大小 pDib->Draw(pDC, CPoint(0, 0), sizeFileDib); //显示DIB 在OnInitialUpdate()函数中设置滚动窗口: CDib *pDib=pDoc->GetPDib(); //获取DIB的指针 if (pDib!=NULL) SetScrollSizes(MM_TEXT, pDib->GetDimensions());//根据DIB大小设置窗口大小 最后添加图像采集命令菜单,其响应函数为: void CPictureTestView::OnTestStart () { CPictureTestDoc * pDoc = GetDocument (); pDoc->;图片抓取(); // 捕获图片 pDoc->;图片读取(); // 将图像读入内存 OnInitialUpdate();//设置滚动窗口 } 编译通过后,点击图像获取命令即可实时获取图像。
图1 图像采集示例 图1 图像采集示例 2.4 相机设置 在采集图像时,我们经常需要设置相机的参数,如图像格式、分辨率、帧率等进行设置,同时为了获得高质量的图像,我们还需要进行白平衡的调整。

当然,我们可以在相机初始化时通过代码来设置这些参数。
但在实际应用中,为了达到最好的效果,我们需要多次调试才能实现。
如果我们修改代码,调试过程会非常麻烦。
。
数码相机通常有一个设置菜单。
我们要做的就是通过代码调用相机的设置菜单。
设置参数后,参数将自动保存和加载。
这将使调试变得更加容易。
使用以下响应函数创建相机设置菜单命令: void CPictureTestDoc::OnTestCameraset() { pgrcamguiToggleSettingsWindowState( m_guicontext, AfxGetApp()->m_pMainWnd->GetSafeHwnd() );//相机设置对话框 } 图2 相机参数设置界面 图2 图4.2 相机参数设置界面 3 结论 本文实现的图像采集系统可以设置数字图像的格式/模式/帧率机器通过该界面,设置光学参数,实时显示采集画面,并能自动控制相机。
,系统稳定可靠。
可以用来完成一些复杂项目中的实时连续图像采集过程,如公路车辆和车牌的自动识别与管理系统、工业生产中的产品包装检测系统等,具有很大的实用性。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-18
06-18
06-18
06-18
最新文章
使用电子管有哪些注意事项?如何检查电子管之间是否短路?
博通支付1200万美元和解SEC财务欺诈指控
八名运营商高管确认加入虚拟运营商
内蒙古农牧区雷电灾害成因分析及防雷对策
北京联通将5G应用于世园会远程医疗急救
TD-SCDMA最后一轮冲刺测试启动,产业前景更加光明
专访阿里云总裁王健:云计算服务平台梦想成真
USB2.0控制器CY7C68013的接口设计与实现