2.MIL开发基础概念和步骤

相对于开源的Open CV来说商业化的MIL开发相对容易,只需要遵循特定的步骤即可以完成自己的开发。但是对于MIL中的一些基础概念还是要理解,不然可能在后面查看函数帮助时会混淆一些概念。

MIL中有五大基本对象(这里的对象和C++的对象不一样额,不过也可以看成一样的,猜想也是一个结构体):Application、System、Display、Digtizer、Buffer。如下图是这5大基本对象的一个简单关系图。


Application

Application指的是你自己开发的一个应用程序,一般应用程序同一时刻只存在一个Application对象。主要用它来提供一个用于控制和执行MIL应用程序的基本环境。

System

System代表为一个包含CPU或GPU、内存或显存和图像控制器的单元分配的一个虚拟访问对象,例如一块Matrox图像板卡,一个电脑主机都可以被分配为一个System。System能够通过加上相机和显示器来采集、保存和显示。每个Application下可以包含多个System,这就好比一台电脑可以插上多块Matrox图像板卡。

Buffer

Buffer对应一块内存,可以对它赋予不同的属性用来对图像作相应处理,如存储、显示、采集、处理,只有赋予了对应的属性的Buffer才能用于对应操作,只赋予了保存属性的Buffer是不能用于显示的。

Digtizer

Digtizer对应相机。它用于相机的采集和相机属性的调整等,和相机有关的操作都是靠它来完成。

Display

Display对应显示器。所有和显示的操作都是靠它来完成。这个在手册中提到了两种Display:一种是MIL内建的用于演示的Display叫Auxiliary Display,它不适用于Windows Desktop,主要用于和Matrox显卡配套使用的Screen,一般用不上,不予讨论;另一种是叫Windowed Display,一种是MIL用于演示的Display,不需要选择要显示的窗口句柄,默认分配的Display对象是此种display,另一种是用户选择要显示的窗口句柄,这个需要你自己选择在哪个windows窗体上显示对应的Buffer图像内容。


值得注意的是:只要你的电脑配置足够好,内存足够大,每一个System下可以包含任意数量的Digtizer、Display和Buffer。但是,在同一时刻用于实际显示的Buffer和Display只能有一个,我的意思是尽管你可以分配多个,但是每一次你只能用一个,要用另一个的话你只需要做一个切换操作,这在后面多Buffer显示中会讲到。

下面我以MIL手册上做一下修改来讲解,下面的源代码(新建一个Win32 Console项目,复制代码到CPP文件中编译即可运行)演示了一个基本的MIL程序开发步骤。

  1. #include <stdio.h>  
  2. #include <mil.h>  
  3.   
  4. #pragma comment(lib, "mil.lib")  
  5.   
  6. int main(int argc, char *argv[])  
  7. {  
  8.     MIL_ID  MilApplication,  /* Application identifier.  */  
  9.         MilSystem,       /* System identifier.       */  
  10.         MilDisplay,      /* Display identifier.      */  
  11.         MilImage;        /* Image buffer identifier. */  
  12.       
  13.     //分配默认的应用  
  14.     MappAllocDefault(M_SETUP, &MilApplication, &MilSystem, &MilDisplay, M_NULL, M_NULL);  
  15.       
  16.     //分配显示的图像Buffer  
  17.     MbufAlloc2d(MilSystem, 500, 500, M_DEF_IMAGE_TYPE, M_IMAGE+M_DISP, &MilImage);  
  18.          
  19.     /* 初始化Buffer,内存中绘制相应图像 */  
  20.     MbufClear(MilImage, 0L);  
  21.     MgraColor(M_DEFAULT, 255L);  
  22.     MgraArcFill(M_DEFAULT, MilImage, 200L, 200L, 10L, 10L, 0.0, 360.0);  
  23.     MgraText(M_DEFAULT, MilImage, 0L, 0L, " MIL ");  
  24.       
  25.     /* 图像Buffer内容显示到相应Display上,此后修改Buffer,Display自动刷新 */  
  26.     MdispSelect(MilDisplay, MilImage);  
  27.       
  28.     /* 打印提示信息. */  
  29.     printf("A circle was drawn in the displayed image buffer.\n");  
  30.     printf("Press <Enter> to end.\n");  
  31.     getchar();  
  32.       
  33.     /* 释放图像Buffer. */  
  34.     MbufFree(MilImage);  
  35.       
  36.     /* 释放默认应用分配的资源. */  
  37.     MappFreeDefault(MilApplication, MilSystem, MilDisplay, M_NULL, M_NULL);  
  38.   
  39.     return 0;  
  40. }  

可以看到最开始分配了Mil的对象,每个对象分配后都有一个MIL_ID类型的标识变量,Application和System是至少要有的,由于有存储和显示图像的需求,还要分配Buffer和Display,没有采集图像的功能,所以不需要分配Digtizer。

最开始程序分配了系统默认的Application、System和Display,这里的Display类型就是前面提及的MIL内建的用于演示的display窗口。


博客中代码文件下载链接


原创,转载请注明来自http://blog.csdn.net/wenzhou1219

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值