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

2023-11-23 12:59
文章标签 基础 步骤 开发 概念 mil

本文主要是介绍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程序开发步骤。

#include <stdio.h>
#include <mil.h>#pragma comment(lib, "mil.lib")int main(int argc, char *argv[])
{MIL_ID	MilApplication,  /* Application identifier.  */MilSystem,       /* System identifier.       */MilDisplay,      /* Display identifier.      */MilImage;        /* Image buffer identifier. *///分配默认的应用MappAllocDefault(M_SETUP, &MilApplication, &MilSystem, &MilDisplay, M_NULL, M_NULL);//分配显示的图像BufferMbufAlloc2d(MilSystem, 500, 500, M_DEF_IMAGE_TYPE, M_IMAGE+M_DISP, &MilImage);/* 初始化Buffer,内存中绘制相应图像 */MbufClear(MilImage, 0L);MgraColor(M_DEFAULT, 255L);MgraArcFill(M_DEFAULT, MilImage, 200L, 200L, 10L, 10L, 0.0, 360.0);MgraText(M_DEFAULT, MilImage, 0L, 0L, " MIL ");/* 图像Buffer内容显示到相应Display上,此后修改Buffer,Display自动刷新 */MdispSelect(MilDisplay, MilImage);/* 打印提示信息. */printf("A circle was drawn in the displayed image buffer.\n");printf("Press <Enter> to end.\n");getchar();/* 释放图像Buffer. */MbufFree(MilImage);/* 释放默认应用分配的资源. */MappFreeDefault(MilApplication, MilSystem, MilDisplay, M_NULL, M_NULL);return 0;
}

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

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


博客中代码文件下载链接


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

这篇关于2.MIL开发基础概念和步骤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418108

相关文章

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF