Matrox Solios采集卡采集图像示例
前言
本文主要讲解如何在C++Builder XE的开发环境上搭建MIL,实现控制Solios采集卡进行图像采集
正文
一、MIL是什么?
MIL是Matrox公司为Solios采集卡开发的配套驱动程序,里面包含功能强大的图像采集函数库Mil-Lite(基本控制库)和Mil(模式识别库),另外还提供了专为控制图像采集、传输、处理、分析及显示而集成的Active Mil和Active Mil-Lite控件,支持在VC、VC++、VB、Borland C/C++下调用。
二、如何使用MIL?
1.安装采集卡驱动
直接双击setup.exe程序,按照引导一直next,直至安装完成即可。
注意:博主安装的是32bit MIL-Lite 9 R2 build 1950,若要完整安装教程,可以参考 [青山笑我依旧在](https://blog.csdn.net/qq_23107577/article/details/120365952) 博主写的文章
2.设置环境变量
假设安装目录为 D:\Program Files (x86)\Matrox Imaging
① 打开环境变量
此电脑 -> 属性 -> 高级系统设置 -> 高级 -> 环境变量
② 新增路径到Path下
双击系统变量下的Path变量,添加以下路径
D:\Program Files (x86)\Matrox Imaging\Mil\DLL
3.C++Builder XE环境设置
① 新建VCL Forms Application工程
② Project -> Options -> Directories and Conditionals
在Include path添加以下头文件路径
D:\Program Files (x86)\Matrox Imaging\Mil\Include
D:\Program Files (x86)\Matrox Imaging\Mil\Include\MilDyn
在Library path添加静态库文件路径
D:\Program Files (x86)\Matrox Imaging\Mil\LIB
③直接将Mil.lib添加到工程里
注意:C++Builder XE直接调用VC开发的库文件会报以下错误,解决方法是使用C++Builder XE自带的implib.exe 将vc的dll转换成bcb支持的lib即可使用,具体命令如下
implib.exe /f D:\Output\BCBFormat\LIB\Mil.lib D:\Program Files (x86)\Matrox Imaging\Mil\DLL\Mil.dll
4.示例代码
#include <Mil.h>
MIL_ID MilSys = M_NULL;
MIL_ID MilApp = M_NULL;
MIL_ID MilImage = M_NULL;
MIL_ID MilDigit = M_NULL;
MIL_ID MilDisplay = M_NULL;
char DCF_PATH[]="solcl_mil80_XCL-C500_8bit_2tap_c.dcf";//INPUT DCF PATH
char destPath[]="D:\\Log\\output\\test.tiff";
void MilCaptureTestDemo(){
ShowMessage("初始化");
MappAllocDefault(M_SETUP,&MilApp,&MilSys,M_NULL,M_NULL,M_NULL);
//分配采集器
MdigAlloc(MilSys,M_DEFAULT,(MIL_API_CONST_TEXT_PTR)DCF_PATH,M_DEFAULT,&MilDigit) ;
//分配buffer
ShowMessage("分配内存");
long imgx,imgy,imgtype;
imgx = MdigInquire(MilDigit,M_SIZE_X,M_NULL);
imgy = MdigInquire(MilDigit,M_SIZE_Y,M_NULL);
imgtype= MdigInquire(MilDigit,M_TYPE,M_NULL);
MbufAlloc2d(MilSys,imgx,imgy,imgtype,M_DISP+M_GRAB+M_IMAGE,&MilImage);
MbufClear(MilImage,0);
ShowMessage("采集");
AnsiString destPath=ExtractFilePath(Application->ExeName)+"test."+Edit_Suffx->Text;
MdigGrab(MilDigit,MilImage);//采集单帧画面
if(MilImage!=M_NULL){
MbufSave(destPath.c_str(),MilImage);
Image1->Picture->LoadFromFile(destPath);
MbufFree(MilImage);
ShowMessage("保存成功!");
}
if(MilDigit!=M_NULL){
MdigFree(MilDigit);
}
if(MilApp!=M_NULL)
MappFreeDefault(MilApp,MilSys,MilDisplay,M_NULL,M_NULL);
}
总结
通过以上的步骤说明,相信大家已经对如何在BCB环境上搭建使用MIL API有一个初步了解,借用诗人陆游的话来说,“纸上得来终觉浅,绝知此事要躬行”,大家可以亲自动手实验下,印象会更加深刻。