以下是小编为大家收集的利用数码相机SDK开发图像采集应用程序,本文共5篇,希望对大家有所帮助。

篇1:利用数码相机SDK开发图像采集应用程序
利用数码相机SDK开发图像采集应用程序
摘要:介绍柯达公司的数码相机开发套件SDK DC280、SDK的结构及其函数分类,并提供了一个典型的编程实例。关键词:SDK 数码相机 开发
数码相机作为一种目前常见的消费类商品,其基本工作原理是利用CCD光耦器件将光信号转变为电信号,经过A/D转换、数据压缩等处理后经串口或USB口在PC端应用程序控制下将图片(多为JPEG格式)传送到PC机的硬盘中。目前PC端的应用程序都由相机制造商所提供。很少有人注意到一些数码相机制造商为开发人员提供了相对丰富的SDK(Software Development Kit)资源,便于有关人员利用数码相机进行图像采集和监测方面的开发工作。SDK开发套件一般由头文件(.H)、库文件(.lib)和动态链接库文件(.dll)组成。美国柯达公司是世界相机制造业和诸多影像标准制定的带头兵。本文将以KODAK DC280 SDK为例对SDK及其应用作介绍,以使感兴趣的开发人员可以自编程序将数据相机应用在工程项目中。
1 SDK结构图
DC280 SDK原理框图如图1所示。SDK控制层位于应用程序与指定SDK控制层(对于DS280相机此层为DC280SDK控制层)之间,(本网网收集整理)它的主要作用是接收应用程序的DC280_OpenCamera指令,同时将指定相机SDK控制层调入内存区;接收DC2x0_CloseCamera()指令,同时释放指定相机SDK控制层所占内存区。指定相机SDK层位于SDK控制层下,本层支持所有访问相机的函数,并将函数执行结果状态码(即错误代码)经SDK控制层上传给应用程序。指定相机控制层的下层为驱动程序层。驱动程序用于与外部设备直接打交道。
2 SDK函数分类
SDK内的函数按照作用类型一般可以分为以下几类:
(1)相机初始化函数:主要包括_CloseCamera和_OpenCamera()。
(2)相机控制函数:主要包括_GetStatus()、_GetConfig()、_SetConfig()、_ControlCameraTime()、_ControlCameraID()、_ControlTakePicture()、_ResetCamera()。
(3)图片管理函数:_TakePicture()、_ResetCamera()。
(4)图片信息获取函数:_GetCameraPictInfo()、_GetAllPictureName()、_GetNativePicture()。
(5)文件传递函数:_GetFileFormCamera()、_SetFileToCamera。
(6)其他类型的函数:包括电池电量数据获取函数、最后一次操作返回码获取函数等。
3 SDK用法的一个典型实例
下面举一个拍摄图片的简单实例使读者大体了解编程的一般模式,其过程如图2所示。首先是相机初始化即打开相机,然后读取目前相机中拍摄方面的参数设置,根据需要修改某些参数设置,接着拍摄图片,最后关闭相机释放内存。例程如下:
以下为SDK用法的`典型例程:
#include “F210.h”
OSErr ret;
DC280_Camera ;Camera;
DC280_ImgProcData ThumbImgInfo;
DC280_TakePictInfo TakePictInfo;
DC280_PictInfo GenericPictInfo;
DC280_SpecificPictInfo SpecificPictInfo;//打开相机
DC280_OpenCamera(VersionData,CameraData); //获取相机设置参数
ret=DC280_ControlTakePicture(&Camera,TRUE,0L,(VOIDPTR &TakePictInfo
);
//修改需要变动的参数
ret=DC280_ControlTakePicture(&Camera,FALSE,(VOIDPTR&TakePictInfo); //拍照
ret=DC280_TakePicture(&Camera,TRUE,&ThumbImgInfo,&GenericPictInfo,(VOIDPTR)&SpecificPictInfo);
//可以根据需要加上文件传递函数等
DC210_CloseCamera(CameraData); //关闭相机
其中DC280_ControlTakePicture的第二个参数为GetSetFlag。当其为true时表示从相机中获取设置参数;为false时表示将改动过的参数输送给相机。DC280_Camera的数据结构如下:
typedef struct {DC210_PortNum PortNum;
DC210_BitRate BitRate;
DC210_CameraType CamType;
BOOL CameraOpenFlag;
VOIDPTR InternalUseOnly;
}DC280_Camera ;
本文通过柯达公司的DC280 SDK开发工具对SDK及利用它开发相机应用程序进行了简单介绍。其他公司SDK的使用方法基本类似,只是函数名称略有不同,使用方法是一致的。SDK中函数及其参数的详细说明,可以在相机制造商的英文网站上从开发工具一览中找到。
篇2:利用数码相机SDK开发图像采集应用程序
利用数码相机SDK开发图像采集应用程序
摘要:介绍柯达公司的数码相机开发套件SDK DC280、SDK的结构及其函数分类,并提供了一个典型的编程实例。关键词:SDK 数码相机 开发
数码相机作为一种目前常见的消费类商品,其基本工作原理是利用CCD光耦器件将光信号转变为电信号,经过A/D转换、数据压缩等处理后经串口或USB口在PC端应用程序控制下将图片(多为JPEG格式)传送到PC机的硬盘中。目前PC端的应用程序都由相机制造商所提供。很少有人注意到一些数码相机制造商为开发人员提供了相对丰富的'SDK(Software Development Kit)资源,便于有关人员利用数码相机进行图像采集和监测方面的开发工作。SDK开发套件一般由头文件(.H)、库文件(.lib)和动态链接库文件(.dll)组成。美国柯达公司是世界相机制造业和诸多影像标准制定的带头兵。本文将以KODAK DC280 SDK为例对SDK及其应用作介绍,以使感兴趣的开发人员可以自编程序将数据相机应用在工程项目中。
1 SDK结构图
DC280 SDK原理框图如图1所示。SDK控制层位于应用程序与指定SDK控制层(对于DS280相机此层为DC280SDK控制层)之间,它的主要作用是接收应用程序的DC280_OpenCamera()指令,同时将指定相机SDK控制层调入内存区;接收DC2x0_CloseCamera()指令,同时释放指定相机SDK控制层所占内存区。指定相机SDK层位于SDK控制层下,本层支持所有访问相机的函数,并将函数执行结果状态码(即错误代码)经SDK控制层上传给应用程序。指定相机控制层的下层为驱动程序层。驱动程序用于与外部设备直接打交道。
2 SDK函数分类
SDK内的函数按照作用类型一般可以分为以下几类:
(1)相机初始化函数:主要包括_CloseCamera()和_OpenCamera()。
(2)相机控制函数:主要包括_GetStatus()、_GetConfig()、_SetConfig()、_ControlCameraTime()、_ControlCameraID()、_ControlTakePicture()、_ResetCamera()。
(3)图片管理函数:_TakePicture()、_ResetCamera()。
(4)图片信息获取函数:_GetCameraPictInfo()、_GetAllPictureName()、_GetNativePicture()。
(5)文件传递函数:_GetFileFormCamera()、_SetFileToCamera。
(6)其他类型的函数:包括电池电量数据获取函数、最后一次操作返回码获取函数等。
3 SDK用法的一个典型实例
下面举一个拍摄图片的简单实例使读者大体了
[1] [2] [3]
篇3:毕业生图像采集怎么穿
大学生毕业图像采集是为配合教育部加强高等教育学历管理,维护学历制度严肃性的一项工作。全国高校毕业生图像采集工作由新华社驻各省区市分社负责,目的是要在在你毕业之前把你的个人信息统计储存下来。图像采集的图会放入国家的数据库,之后将用于毕业证书、学位证书的制作、学历电子数据的`上报注册等工作。而且拍照当天需要携带自己的身份证件,不能使用临时身份证、学生证等代替,因为新华社毕业信息采集需要使用身份证的电脑机读项目,临时身份证、学生证等是无法通过核验的。
篇4:用Visual Basic 5.0开发无线通讯数据采集应用程序
用Visual Basic 5.0开发无线通讯数据采集应用程序
摘要:本文通过对无线通讯系统基本工作原理的分析,阐明了采用Visual Basic 5.0中的控件MSCOMM.VBX进行无线数据采集程序开发的基本方法。并结合900M频率无线通讯电台的特点,给出了基本通讯接口源程序代码。关键词: VB5 无线通讯 控件
1 引言
目前对于用于数据采集和传输的无线设备之间的通讯编程,一般仍采用C语言和汇编语言较多,这主要是由于在编程时,要涉及到对无线通讯设备硬件的控制,因此,选择C语言和汇编语言的较多。采用以上两种语言进行编程,对于一般的编程人员来讲,很难较快的掌握。本文采用可视化的编程环境从根本上解决了以上问题,只要有一定编程基础的技术人员,均可实现自己编程。
2 无线通讯设备的基本工作原理
在无线的通讯方式中,数据传输的基本原理可以认为是通过调制解调器进行工作的,而这种调制解调器是无线方式工作的,它不含有拨号功能,而且和它直接连接的是无线电台。无线电台的作用就相当于有线传输中的电话线,它是通过无线电波进行发送和接受信号的。而无线调制解调器的作用是将二进制的信号调制成可以在无线电台之间传输的无线电波。
信号转换过程的属性取决于调制解调器所接收到的源信号和目的信号。一般来说,调制解调器从终端或计算机接以串行方式收到二进制信号后,将它们转换成了音频信号。然后调制解调器将这些声音通过无线电台传输出去。在接受端,另一个兼容的调制解调器将这些声音信号转换成了二进制信号,并把这些二进制信号发送给终端或计算机。
由于在无线电台之间有过滤和放大作用,同时,无线电波的`传输受很多因素影响,因此传送的速度受到限制。下面给出了一种900M电台的技术特性见表 1。本程序就是使用的这种电台,对于其它参数的电台,其基本原理也是一样的。
表 1 900M无线电台的技术指标
项目
指标
含义
传输速率
1.2Kbps或2.4Kbps
每秒的字节数
数据的控制
透明传输
发射功率
3W
接受灵敏度
-105dBm
工作频率
915―917MHZ
信道
158个
3 无线数据采集的编程
由无线通讯的基本原理可以看出,无线的数据采集和传输主要包括以下几个过程,从带处理器的传感器或计算机终端发送二进制信号到无线调制解调器;无线电台之间建立连接并传输数据;从另外一端的电台接受二进制数据;将数据传输到计算机。因此,要建立无线设备之间的通讯必须在两端进行编程。
从计算机终端到无线电台的数据传输是通过计算机的串行口进行的,通过对串行口进行编程就可以实现向电台发送数据。在Visual Basic5.0中的控件MSCOMM是进行串口通讯的。通过设定控件MSCOMM的属性,可以用VB5.0对其进行灵活的编程,控件MSCOMM同时支持事件驱动及轮询方法。控件MSCOMM能生成一个名为OnComm的事件,它能能捕获的事件范围包括通过串口接受数据以及遇到任何错误等等。事件或错误的值以整数的形式保存在CommEvent属性里。可根据CommEvent属性判断最近一次事件或错误。也可以在程序中设置一个循环,每次循环都直接检查CommEvent属性的值,从而对事件及错误进行“轮询”。如果应用程序规模小,这种方法相当完美。
下面的部分程序代码是计算机和900M无线电台之间的传输程序,本程序已经在486计算机和PII586上调试通过。
1 从串口读入电台数据程序GetStringFromComm
功能:(1) 主要完成从端口获得数据,将二进制的数据转换为ASCII码数据
Public Function GetStringFromComm() As String
定义变量(略)
If frmTerminal.MSComm1.InBufferCount < 7 Then
GetStringFromComm = “”
Exit Function
End If
'//读入标志码
frmTerminal.MSComm1.InputLen = 6
ReDim Preserve BinDataarr(6) As Byte
BinData = frmTerminal.MSComm1.Input
BinDataarr = BinData
UserDataLenth = BinDataarr(5) '用户数据的长度
Wait1:
If BinDataarr(5) >frmTerminal.MSComm1.InBufferCount Then '未接受完数据
delay 6 '延时6s
GoTo Wait1
End If
frmTerminal.MSComm1.InputLen = UserDataLenth
BinData = frmTerminal.MSComm1.Input
ReDim Preserve BinDataarr(UserDataLenth)
&nbs
p;BinDataarr = BinData
GetStringFromComm = BinTotext(UserDataLenth, 0)
frmTerminal.MSComm1.InBufferCount = 0 '清空接受缓冲区
End Function
2 从串口向电台发送数据程序SendStringToComm()
Public Sub SendStringToComm(ByVal TransCommand As Integer, ByVal TransString As String)
ReDim BinDataarr(5)
frmTerminal.MSComm1.OutBufferCount = 0 '//清空发送缓冲区
'TransString = makestring(Val(mc.txtdesstation.Text), 4) + TransString
'//设置标志码
(略)
Select Case TransCommand
Case 0:transmit text
ReDim Preserve BinDataarr(6 + Len(TransString))
TextTobin (TransString)
BinData = BinDataarr
frmTerminal.MSComm1.Output = BinData '发送
Case 1:transmit binary data
ReDim Preserve BinDataArr(5 + Len(TransString) + UserDataLenth) As Byte
TextTobin (TransString)
BinDataArr(5) = UserDataLenth + Len(TransString)
Dim i As Integer
For i = 1 To UserDataLenth
BinDataArr(5 + Len(TransString) + i) = userDataarr(i - 1)
Next i
BinData = BinDataArr
MSComm1.Output = BinData
End Select
binDatalenth = 0
End Sub
以上的两个子程序是在实现无线传输的基本程序,如果要实现无线设备两端的数据采集,需要在此基础上进行文件格式、控制命令、编码方式等的编程,这些编程均可通过Visual Basic5.0实现,由于篇幅所限,本文对这部分内容不作详细叙述。
4结论和讨论
通过以上的实例编程可以得出,采用Visual Basic5.0对无线数据采集和传输进行编程,具有可视化、容易掌握、灵活性好,尤其串口控件MSCOMM的属性功能齐全,完全可以控制串行口实现各种功能。通过Visual Basic5.0编写的程序具有界面友好,操作方便,且编程过程简单。本文仅在数据采集方面应用了Visual Basic5.0,在其他的通讯方面,它还有更大的应用。例如在终端防真程序,在电子邮件和互连网等方面也有较大的应用。
参考文献:
1、微软公司《Visual basic5.0 联机手册》
2、南开大学出版社《微型计算机接口技术》
3、人民邮电出版社《无线通讯信息手册》
4、中国科学院希望电脑技术公司《计算机通讯与联网技术》
篇5:Android应用程序开发另解及SDK工具集的另类用法
相信对于广大Android应用开发爱好者来说,Android SDK工具集的大家都已经能够很熟练的使用,但是我这里要介绍的是SDK工具集的非常用使用方法,即“另类用法”,
首先要说的是,大部分的Android应用程序开发者是基于Android模拟器来开发应用程序的,这种开发方式虽然很方便,直接用Eclipse就可以集成开发环境,基本上不需要手动去设置或者操作什么,但是同时也有几点很大的弊端:
1、Android模拟器的内存有限,如果开发相对比较耗资源的应用程序,就比较头疼了--模拟器运行的十分缓慢;而且随着模拟器分辨率设置的变化,分辨率越大模拟器就越卡也给应用开发带来了不小的困扰。这时候有些通报可能就会选择购买开发板或者用买个Android手机来进行应用的开发。但是其实,我们是有更好的方式来做Android的应用开发,这里先卖个关子。
2、通常来说,大家进行Android应用程序的开发都是在本机上实现的,也就是说代码编辑和模拟器运行是在同一台机器上实现的,但是有没有想过将这两者分别在两个机器上进行,或者说用虚拟机来实现Android系统的模拟呢?
说到这里,大家是不是觉得很有意思呢?
其实,Android不止是提供了arm版的!!!这里要隆重介绍一下Android—x86版,有不了解的朋友可以百度一下。
其实说起来很简单,使用android-x86进行应用程序的开发需要经历一下几个步骤:
1、找一台linux主机或者装一个虚拟机
2、下载android-x86源代码并进行编译(这部分本人就不再这里详细介绍了,百度一下大把大把的)
3、将编译生成的android镜像(一般名为generic-x86.iso)用虚拟机运行
经过一下几步,大家就可以看到一个类似操作系统的android系统了,它的好处是,你可以随意设置这个系统的内存大小,flash大小,CPU频率等各种硬件属性,使得你的应用程序开发不需要再考虑各种硬件资源对模拟器的影响,你不用再喝着咖啡吃着面包看着模拟器缓慢的运行心里干着急了!!!甚至,你完全可以找一台主机,把android系统装到台式机或者笔记本上!!
写到这里,关键的问题就来了,可能有些朋友就要问了,这样的话,要怎么样把应用程序开发与android-x86这个系统联系起来呢?
这就涉及到本文的第二部分了,即android sdk工具集的另类用法。
首先说一种比较傻瓜式的方式:你可以将编译成的android apk应用程序通过U盘挂载到andriod-x86系统上,然后通过U盘对应用进行安装,
不过显然,如果只能用这种方式的话,我也不会写这篇文章里。
其实android sdk工具集本身已经做得够强大了,只要大家细心看看sdk各工具的使用说明就能发现,这里鄙人做下简单的说明:
adb工具的使用其实并不只局限于对模拟器的使用,它还有更强大的用法。
adb connect使用说明:
按照刚才说的,你已经将android-x86通过虚拟机运行起来了,或者你资源比较丰富,一不做二不休已经将这个系统装到另外一个系统上来,那么接下来,就说一下实现的详细步骤。
首先,在虚拟机或者装有android系统的主机上用ALT+F1,你会惊奇的发现,原来这个系统还有提供命令行界面!其实想想这也没什么好奇怪的,因为android使用的是linux内核,而linux内核的ALT+F1就是切入命令行界面的快捷键,同样的,要重新回到图形界面,ALT+F7就行了,这和linux系统也是一致的。
进入命令行界面之后,敲入netcfg命令,我们可以看到这个系统的ip,比如说这里我们看到的是192.168.1.160。
接下来,就是adb工具的另类用法了:adb connect 192.168.1.160:5555(冒号前面的参数是你android-x86系统的ip,后面那个参数是端口号,不可变)。
当显示连接成功的时候,所有的猪呢比工作都已经准备完成了。
接下来,就是见证奇迹的时刻:
在windows主机下使用adb install命令将你主机上有的apk应用程序安装一下,你就会惊喜的发现,这个应用程序居然被安装到了android-x86系统上,并且运行的飞快,比那什么什么模拟器快了不知道多少倍!!!
更有甚者,你会发现,怎么你通过Eclipse运行应用程序之后,模拟器并没有打开,而这个应用程序已经神奇的运行到了android-x86系统上来!!!
这是怎么回事呢?
其实原理很简单,之所以起初你使用adb install和用Eclipse运行程序的时候程序会装到模拟器上,是因为adb这时候模拟连接的就是模拟器,而当你使用adb connect连接上了android-x86系统上的时候,这个“默认的模拟器”就变成了你的虚拟机或者另外一个anddroid主机了,这样一来,所以对“模拟器”的操作都将会在android-x86系统上执行。
是不是很神奇呢?
如果有兴趣的话,不妨一试哦!虽然可能起初会花费你一些时间,但是带来的快乐和之后开发的高效,一定会给你意想不到的收获的!!
★如何利用Visual?Basic开发身份证号码批量验证工具软件
文档为doc格式