建议按照如下的流程操作相机(其中有一些步骤是可选的,已经标明):
一、载入SDK的动态链接库档MVCAMSDK.DLL。可以使用动态或者静
态加载两种方式。
如果使用C/C++进行开发,在工程引用 CameraApi.h头文件(位于安装目录的SDK/DEMO/VC++/include中)和MVCAMSDK.lib库文件(位于安装目录的SDK文件夹中),然后就可以直接在工程中引用SDK中的接口函数了,但是MVCAMSDK.DLL必须和的应用程序放在同一目录下或者是系统的system32目录下,放置于其他目录时,必须设定系统的环境变量(PATH)。
如果使用VB进行开发,可以通过我们VB6例程中类似的方法进行加载,直接定义SDK的接口函数并指明其引用的DLL文件即可。SDK\Demo\VB6\Module\CameraApi.bas模块囊括了所有的SDK接口,将MVCAMSDK.DLL中导出的每一个函数接口都映像
成了VB可以调用的函数。
如果使用Delphi进行开发,可以通过我们Delphi6例程中类似的方法进行加载,直接定义SDK的接口函数并指明其引用的DLL文件即可。SDK\Demo\Delphi6\Units\CameraApi.pas单元囊括了所有的SDK接口,将MVCAMSDK.DLL中导出的每一个函数接口都映像成了Delphi可以调用的函数。
如果使用C#进行开发,可以通过我们C#例程中类似的方法进行加载,C#加载MVCAMSDK.DLL的过程和VB、Delphi类似,为了方便使用,我们的C# DEMO中提供了2个工程,一个是MVSDK,这个工程专门用来定义开发包数据结构和加载开发包的API函数,另一个是Basic工程,该工程中则实现了一个集预览、抓拍、相机设置为一体的例程。Basic工程通过调用MVSDK工程中的代码来间接访问MVCAMSDK.DLL。
二、初始化SDK。完成了SDK的加载以后,在使用其他接口之前,请调用CameraSdkInit函数进行初始化。
三、枚举设备。调用CameraEnumerateDevice函数枚举设备,获得当前连接到PC上的相机的设备列表,列表中包括设备名(可自己修改)、版本号、唯一序列号、相机型号等信息。
四、初始化设备。根据第三步中获得的相机设备枚举信息,调用CameraInit函数初始化指定的相机,得到相机的句柄。如果需要同时打开多个相机,则利用多个相机的设备名多次调用CameraInit来获得多个相机的句柄,后续对相机的操作,都需要此时获得的相机句柄来指定操作的相机
对象。
五、让SDK进入图像采集模式。调用CameraPlay函数,让相机进入工作模式,并且SDK开始接收来自相机的图像。
六、抓取图像。MindVision SDK提供了两种获得图像数据的方式,这两种方式的效率都是一样的,底层都使用了零拷贝机制来提高效率,可以根据的开发习惯来选择其中一种。
主动调用CameraGetImageBuffer来获取一帧图像数据。该函数会获得一个SDK内部用来接收图像数据的缓冲区地址,以及帧头信息。同时,该函数可以设定超时时间,在指定的时间内没有获取到图像(线程会被挂起),则返回超时。在第三步中,初始化相机以后,调用CameraSetCallbackFunction来设定一个回调函数。这种方式是被动的,只有在SDK内部接收到
有效的图像数据帧后,才会调用设定的回调函数来传递收到的图像数据帧。
注意:也可以同时使用以上两种方式来获取图像,但是不能在CameraSetCallbackFunction设定的回调函数中来调用CameraGetImageBuffer再次获取图像,这样会产生死锁问题。
七、处理图像。上一步获取的图像帧,是相机输出的原始格式,大多数型号相机,原始输出都是Bayer格式或者YUV格式,这些格式信息会被自动添加到帧头信息中,调用CameraImageProcess来获得图像处理的效果,如颜色增益调整、白平衡校正、饱和度、LUT变换、降噪等等,并将YUV或者Bayer格式的原始数据转换为24BIT的位图格式(RGB888)。
八、迭加十字线、自动曝光参考窗口、白平衡参考窗口等附加内容(如果开发中,不需要迭加信息,这一步可以略过)。调用CameraImageOverlay函数,被设置为可见状态的十字线、自动曝光参考窗口、白平衡参考窗口,将被迭加到输入的图像上。CameraImageOverlay的输入必须是位图格式,我们建议在调用CameraImageProcess得到位图格式后,再调用CameraImageOverlay函数。
九、将图像保存或者显示图像(如果的开发中,对图像进行别的处理,而不需要将图像保存成文件或者进行显示,这一步可以略过)。
如果需要保存图像到文件中,在第六步、第七步或者第八步后,调用CameraSaveImage函数来保存图片,MindVision SDK支持PNG、BMP、JPG和原始数据四种方式。如果要保存原始数据,应该在第六步以后就调用CameraSaveImage函数;如果保存成BMP、PNG、JPG格式,应该在第七步后调用CameraSaveImage数:如果保存成BMP、PNG、JPG格式的同时,需要迭加十字线和自动曝光、白平衡参考窗口的位置,那么可以在第八步后调用CameraSaveImage函数。
如果需要显示图像,有以下两个方式:
a. 自己根据开发环境来实现图像显示,例如利用OpenGL、DirectDraw、Windows GDI等方式来实现图像的显示。
b. 利用我们的SDK里封装好的显示接口来显示图像。在第四步中初始化相机后,调用CameraDisplayInit函数来初始化显示接口,该函数需要传入显示控件的句柄(HWND类型),只适合VC/C++、VS、VB、VB.NET、Delphi、C#等使用Windows GDI开发接口的工具,是有一定的局限性,但如果满足使用的条件,我们还是建议使用我们封装好的显示接口。
十、在退出程序前关闭相机(反初始化,非常重要,如果直接关闭程序而不反初始化相机,程序有可能会报内存错误)。在关闭相机时,调用CameraUnInit函数。