欢迎来到工作总结网!

佳能打印机高质量打印_基于DirectX和佳能SDK的高质量贴纸照系统设计

其他范文 时间:2022-09-19

【www.zgzsclpt.com--其他范文】

  摘要:该文采用C#2.0,利用DirectX框架和佳能SDK进行高质量贴纸照系统的设计和开发,系统包括照片输入子系统、照片存储子系统及照片处理子系统三个子系统,同时结合一般游戏的引擎模型和Managed DirectX框架,设计开发了一个完整的娱乐系统模型。该系统,具有良好的人机交互界面,而且最终照片处理非常科学,具有很广的应用价值。
  关键词:DirectX;Canon SDK;游戏引擎
  中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)10-2374-04
  The Design of High Quality Photosticker Based on DirectX and Canon SDK
  SU Qian-min, WU Shi-ju
  (Shanghai University of Engineering and Science, College of Electrical and Electronic Engineering Shanghai 201620,China)
  Abstract:In this paper, a high quality sticker system is built with C# 2.0 under the framework of DirectX and canon SDK. There are three subsystems: a photo input subsystem, photo storage subsystem and photo processing subsystem. Furthermore the general game engine model and the managed DirectX framework is combined, thus a complete entertainment system model is realized. Finally this system has a good interactive interface and the final photo is scientific ,which will have a wide application.
  Key words:direct x; Canon SDK; Game Engine
  目前应用广泛的的贴纸照系统是通过对人物图像的获取,并为其添加精美修饰图案,最终合成图案输出成照片的多媒体软件。由于人们对于照片质量及系统娱乐性的要求不断地提高,国内现有的大多系统已经不能满足用户的要求。
  1概述
  贴纸照系统是通过图像获取设备(如:摄像头、照像机、摄像机等),对人物影像的获取,将其数字化存储到计算机中,并为其添加精美修饰图案,最终合成图案输出成照片的多媒体软件。目前市面流行的大头贴机器很多,但大部分是用摄像头,处理主要是半身像,而且背景是固定的,不能调节,质量相对很差。该文阐述利用DirectX技术提高图像、音频的处理能力,增强用户交互性,开发出一套充满娱乐性的贴纸照系统,可广泛应用于照片处理的小型PHOTOSHOP系统。
  贴纸照系统就是一项多媒体系统,它集成了图象获取、图象处理、音频处理、实时用户操作处理,具用很强的集成性、实时性和交互性。为了开发出这样高集成性、实时性、交互性的多媒体系统,微软的DirectX组件提供了一整套解决方案。DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染、交互式音乐和环境音效等高要求应用开发服务的。
  该文采用C#2.0,利用DirectX框架和佳能SDK进行高质量贴纸照系统的设计,采用DirectX框架,建立娱乐系统模型,提高系统的人机交互性,并采用边缘检测算法以及种子填充算法,提高了最终图片的质量。
  2系统设计
  由于贴纸照系统运作流程可以分为照片获取、存储、编辑输出这三个步骤,所以本系统将分解为三个子系统进行开发(图1),三个子系统分别为照片输入子系统、照片存储子系统及照片处理子系统。三个子系统之间存在松耦和的依赖关系,这样可以使得整个系统方便的更变输入方式、存储方式及编辑输出流程,而不会过多地影响其它子系统的运作。系统会变得易扩展、易维护。
  根据功能需求,系统硬件采用了基于数据库的网络系统,包括数据库服务器、专门用于用户照片获取的客户端以多台用于用户编辑和照片输出的客户端。系统采用佳能照相机进行照片获取,并存储到数据库服务器中,然后用户可以通过编辑终端(触摸屏和小键盘)用来编辑照片,编辑好的照片采用相纸,利用网络打印机打印。
  贴纸照系统的业务流程一般包括选择分割方式、拍照、选择照片、编辑照片、设置照片放置方式、打印照片。照片拍摄由系统控制相机开启,用户点击鼠标,拍摄照片;照片编辑根据用户自己喜好,编辑照片,具体包括背景、边框、图案编辑(各有10个不同样式)。最后照片输出查看,并保存到数据库。
  2.1照片输入模块设计
  照片输入子系统主要功能为:照片输入设备的控制并提供设备控制接口。
  1)输入设备控制接口
  
  图1贴纸照系统用例图
  由于输入设备的多样性,包括摄像头、数码相机、数码摄像机等。每一种设备有不同的设备驱动及控制管理程序接口,即使同为数码相机也因不同品牌所提供的SDK(Software Development Kit软件开发包)也大不相同。
  然而,贴纸照系统中并不需要太多依赖于设备的特性的控制,例如:程控对焦、程控曝光等。本系统中仅需要对照片的拍摄及传输进行控制即可达到需求。所以,系统中设计一个接口向其它子系统提供统一的拍摄方法及传输方法。
  接口设计代码:
  public interface IPhotoInput
  { void initialize();
  void capture(string filename);
  void release(); }
  2)输入设备控制
  本系统中将使用佳能(Canon)数码相机作为输入设备,并使用佳能公司提供的SDK进行开发,实现对数码相机的控制。
  2.2照片处理模块设计
  照片处理子系统是直接与用户交互的一个子系统,主要功能为向用户提供一个友好、易操作、交互性强的用户界面。根据整个贴纸照系统运作流程,包括拍照、选择照片、选择分割方式、编辑照片、放置照片位置、输出打印,获取用户操作进行照片处理。
  由于本系统是一个多媒体娱乐系统,不同于一般Windows应用程序,而更与游戏程序有较多相同之处,所以该子系统采用一般游戏的框架模型为基础进行改进,以提高运行效率及交互性。本项目中结合一般游戏的引擎模型和Managed DirectX框架,设计开发了一个完整的娱乐系统模型,如图2所示。并在此基础上构建起更快速、更高效、更人性化的贴纸照系统。本项目中下一帧的渲染工作、复制帧到后备表面、翻转后备表面到主表面的工作由Managed DirectX 3D自动处理完成。
  
  图2系统引擎框架图
  2.省略数据访问组件实现Ms SqlServer等其它数据库系统的存储方式。
  3关键技术实现
  3.1原始图像获取
  Canon Digital camera SDK(CD-SDK)是佳能公司提供的一个开发接口,它可让用户可以控制佳能数码相机和获取由相机生成的数据。CD-SDK被设计成为提供标准方式来控制和获取不同佳能相机模块及其生成的数据。
  通过使用CD-SDK来创建软件,可以将佳能数码相机的功能集成到软件中去。通过使用CD-SDK也可以将程序集成到相机中来扩展相机的功能。
  CD-SDK提供了一个接口给用户,使用户可以获得佳能数码相机拍摄的照片。CD-SDK使用户可以将照片从相机传输到电脑或存储设备。也可以用来开发将RAW格式的照片转换成为常用的格式的程序。可以开发使用电脑来控制数码相机的程序。
  SDK中函数调用时需要进行传递的参数主要是设备句柄。设备句柄是用来表示设备的唯一标识。相机控制是通过有序的调用一系列函数完成的。基本过程为初始化相机,然后拍照,最后释放资源,图表示了控制相机的基本过程。初始化相机包括了调用CDStartSDK、CDEnumDeviceReset、CDGetDeviceCount、CDEnumDeviceNext、CDOpenSource、CDEnterReleaseControl方法,分别表示启动SDK模式、重置设备、得到可用设备数、遍历设备、得到设备句柄、进入远程控制模式。拍照时调用了CDSelectReleaseDataKind、CDRelease、CDGetReleasedData方法,分别表示选择数据类型、拍照、得到数据。在完成拍照工作释放资源时,将会调用到CDExitReleaseControl、CDCloseSource、CDEnumDeviceRelease、CDFinishSDK方法,分别表示退出远程控制模式、释放设备句柄、释放设备、退出SDK模式。完整流程图如图3所示。
  
  图3 Canon SDK函数调用顺序
  由于CD-SDK函数库是使用C/C++方式编写而成的,如何能在C#完全面向对象的语言中得到应用?本项目中采用P/Invoke的方式调用C/C++的函数库。
  P/Invoke是.Net平台调用非托管的DLL代码的一种机制。它对于调用Win32 API或那些非.Net平台开发的DLL特别有用,就如同本项目中的C/C++函数库。
  调用方式过程基本如下:
  1.将using System.Runtime.InteropServices命名空间添加到项目中
  2.定义调用所需数据结构
  3.声明函数原型
  4. .NET中调用
  3.2边缘检测和种子填充算法的实现
  由于拍摄照片时的场景因素,采用一色背景布作业成像背景,采用对有陡峭的低噪声图像响应最好的Roberts算子,作为边缘检测算法来进行原始照片中人像的边缘检测。
  Roberts算法的过程如下:
  1.读取源位图
  2.创建目标位图
  3.循环遍历每一个像素(最右侧及最底行像素除外)
  4.计算该像素及右,下,右下四个像素的值[计算公式:Sqrt((P(x,y)-P(x+1,y+1))2+(P(x+1,y)-P(x,y+1))2)]
  5.将值写入目标位图
  而种子填充算法是是轮廓提取算法的逆过程。系统在边缘检测完成之后,再利用种子填充算法将除人形以外的部分填充上颜色,然后跟用户选择的背景,图章,手写的文字进行多层图像羽化融合,形成最终图片(图4),很好地满足用户的需求。
  
  1)原始图像
  
  2)边缘检测图像
  
  3)种子填充算法图像
  图4图像处理
  4结论
  该文采用C#2.0,利用DirectX框架和佳能SDK进行高质量贴纸照系统的设计,实现了由背景、前景、图案构成的编辑照片模式,采用DirectX框架,建立娱乐系统模型,提高系统的人机交互性,用P/Invoke技术实现佳能数码相机的远程控制,并采用边缘检测算法以及种子填充算法提取人物轮廓并进行填充,提高了最终图片的质量,经用户使用,效果非常明显,极具推广价值。
  参考文献:
  [1]王明福,齐治文.基于DirectX的游戏动画技术研究[J].计算机工程与设计,2005(4):940-943.
  [2] Tom Miller. Managed DirectX 9[M].Sams Publishing,2003(10).
  [3]刘伟华,张尤赛,王敏. .Net框架下Direct3D程序的快速开发[J].电脑开发与应用,2004(12):34-36 .
  [4]刘军,姚子建.用边缘检测算子实现图像边缘检测[J].福建电脑,2006(2):117-118.
  [5]陈曙,辛阳.利用数码相机SDK开发图像采集应用程序[J].电子技术应用,2003(7):21-22.

本文来源:http://www.zgzsclpt.com/content/200539.html

推荐内容