一、什么是Mbuf

以Mbuf为前缀的函数构成缓冲模块。缓冲区模块允许您分配和控制数据缓冲区(存储区域)和容器(容纳缓冲区和其他容器的MIL对象),这些通常由多个MIL模块的功能操作。缓冲区的示例包括图像缓冲区和查找表(LUT)缓冲区。该模块允许您使用子缓冲区或感兴趣的区域隔离缓冲区的区域,将缓冲区的区域或位平面复制到另一个缓冲区,并将使用拜耳滤波器从相机获取的图像转换为3波段彩色图像。该模块可以归档和检索常用存储格式(如TIFF、JPEG和AVI)的缓冲区数据。该模块还允许您压缩和解压缩图像和序列,无损或无损。

二、Mbuf常用功能

三、 函数调用

1. Alloc

主要使用 MbufAlloc1d、MbufAlloc2d 函数和 MbufAllocColor 函数。

其中 MbufAlloc1d 可能用来分配1D图像、数组、Kernel等。

其中 MbufAlloc2d 可能用来分配2D图像、数组、Kernel等。

MbufAllocColor 可用来分配2D黑白、彩色图片、数组等。

MIL.MbufAlloc1d(MilSystem, 640, 8 + MIL.M_UNSIGNED, MIL.M_IMAGE + MIL.M_DISP + MIL.M_GRAB + MIL.M_PROC, ref Image1);
MIL.MbufAlloc2d(MilSystem, 640, 480, 8 + MIL.M_UNSIGNED, MIL.M_IMAGE + MIL.M_DISP + MIL.M_GRAB + MIL.M_PROC, ref Image2);
MIL.MbufAllocColor(MilSystem, 3, 640, 480, 8 + MIL.M_UNSIGNED, MIL.M_IMAGE + MIL.M_PROC + MIL.M_DISP, ref Image3);

所有分配的MilID都需要释放。

MIL.MbufFree(Image);

2. Child

顾名思义,原图的子buf,对子buf的处理等效于原图处理,因为处理区域更小,所以效率更高一些。

MIL.MbufChildColor(ImageColor, MIL.M_LUMINANCE, ref Image);
MIL.MbufChildColor(ImageColor, MIL.M_RED, ref Image);
MIL.MbufChild2d(ImageGray, 124, 98, 200, 300, ref Image);

MbufChildColor。针对彩色图片的算子,这个是提取原图的某一个通道,要求输入图片是3通道彩色图片,输出图片可以是抽取 RGB, HSL, HSV, YUV中任意一个通道,Mil会自动的将原图转换到对应的格式并抽取你需要的通道给你,这个转换图片格式的过程是在Mil内部完成的,并不会改变输入图片的格式,但是对子buf的处理结果会影响到原图。

1)如果原图是RGB三通道彩色图片ImageColor,我们初始化为全黑;

2)我们提取HSL格式中的L通道子图像ImageChildL,Mil会自动吧RGB格式的原图转换成HSL格式,并把L通道数据给你,然后原图又变成RGB格式。

3)这时我们把L通道子buf数据置成255,你会发现这个操作的影响按照HSL格式图像的方式还原到了RGB原图中。

MIL.MbufAllocColor(MilSystem, 3, 640, 480, 8 + MIL.M_UNSIGNED, MIL.M_IMAGE + MIL.M_PROC + MIL.M_DISP, ref Image);
MIL.MbufClear(Image, MIL.M_COLOR_BLACK);
MIL.MbufChildColor(Image, MIL.M_LUMINANCE, ref Image2);
MIL.MbufClear(Image2, 255.0);

MbufChild2d。针对单通道图片的算子。如果我们将原图中某一个2D子buf进行操作等效于在原图设置一个ROI进行操作。

子buf同样需要释放,因为所有分配的MilID都需要释放 。

3. Copy

复制,Clone是复制属性,会分配一个新的图像ID;Copy是单纯的复制图片,不会分配一个新的图像ID。

如果需要快速分配一个MbufID,可以使用Clone函数,如果是有ID需要复制图片数据则使用Copy函数。

举个例子,如果你有一张图片A,Clone得到图片B,那么图片AB一模一样,但是图片B是纯黑的,因为克隆是不包括数据的。

MIL.MbufClone(Image, MIL.M_DEFAULT, MIL.M_DEFAULT, MIL.M_DEFAULT, MIL.M_DEFAULT, MIL.M_DEFAULT, MIL.M_DEFAULT, ref ImageNew);
MIL.MbufCopy(Image, Image2);

4. Control

这个我并不常用,用过Max和Min两个属性重新设置图像映射的最大最小值。即将原图最大最小值范围内的像素中心映射到0-255。

其它的还有Lock,Map等属性可以参考帮助文档。

MIL.MbufControl(ImageSrc, MIL.M_MIN, 20.0);
MIL.MbufControl(ImageSrc, MIL.M_MAX, 200.0);
MIL.MimRemap(MIL.M_DEFAULT, ImageSrc, ImageDst, MIL.M_DEFAULT);

5. Inquire

查询图像信息。

MIL.MbufInquire(ImageSrc, MIL.M_SIZE_BIT, ref SizeBit);      // 图像位深 8位
MIL.MbufInquire(ImageSrc, MIL.M_DATA_TYPE, ref DataType);    // 图像数据类型 无符号
MIL.MbufInquire(ImageSrc, MIL.M_SIZE_BAND, ref SizeBand);    // 图像通道数 1通道或者3通道
MIL.MbufInquire(ImageSrc, MIL.M_SIZE_X, ref SizeX);          // 图像宽
MIL.MbufInquire(ImageSrc, MIL.M_SIZE_Y, ref SizeY);          // 图像高

6. IO

对于本地图片的读写。

MIL.MbufLoad("1.bmp", min1);   // 不会分配新的MilBufID
MIL.MbufRestore("2.bmp", MilSystem, ref Image);   // 会分配新的MilBufID
MIL.MbufImport("2.bmp", MIL.M_DEFAULT, MIL.M_RESTORE + MIL.M_NO_GRAB + MIL.M_NO_COMPRESS, MilSystem, ref min1);   // 会分配新的MilBufID + 指定图像数据格式
MIL.MbufSave("4.bmp", min1);

7. Data

从MbufID中获取和放置图像数据,对应的有1D 2D等函数,用法类似。需要注意的是数组数据类型和大小。

Byte[] data = new Byte[649*480];
MIL.MbufGet(MilImageID, data);               // 从MilID中取出数据到数组
MIL.MbufPut(MilImageID, data);               // 从数组中取出数据到MilID

8. Other

// 设置图片处理的ROI,ROI图片非0的区域都是有效区域
MIL.MbufSetRegion(ImageSrc, ImageRoi, MIL.M_DEFAULT, MIL.M_DEFAULT, MIL.M_DEFAULT);// 初始化图片为纯黑图片
MIL.MbufClear(ImageSrc, 0.0);

Mil学习之Mbuf相关推荐

  1. Mil学习之Mim的简单操作

    1. 旋转矩形区域的矫正 MIL.MbufAllocColor(MilSystem, MIL.MbufInquire(MilImage, MIL.M_SIZE_BAND, MIL.M_NULL),nW ...

  2. Mil学习之Mapp

    一.什么是Mapp 以Mapp为前缀的函数构成了应用程序模块.应用程序模块允许您初始化和控制MIL应用程序的执行环境.除其他外,该模块还提供集成调试服务.用于基准测试的高性能计时器.可移植线程和事件处 ...

  3. Mil学习之Mcal

    将常用的Mcal模块函数梳理了一下 代码没有调试,可能会有Bug using System; using System.Collections.Generic; using System.Linq; ...

  4. 模式识别 - 处理多演示样例学习(MIL)特征(matlab)

    处理多演示样例学习(MIL)特征(matlab) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27206325 多演示样例学习( ...

  5. ObjecT4:On-line multiple instance learning (MIL)学习

    原文链接:http://blog.csdn.net/ikerpeng/article/details/19235391 用到论文,直接看翻译. 文章:Robust object tracking wi ...

  6. 多示例学习 MIL(multiple instance learning) 理解

    多示例学习举例:假如一段视频由很多张图组成,假如10000张,那么我们要判断视频里是否包含某一物体,比如气球.单张标注每一帧是否有气球太耗时,通常人们看一遍说这个视频里是否有气球,就得到了多示例学习的 ...

  7. 基于Python和OpenCV的目标跟踪学习教程 Object Tracking using Python and OpenCV

    实现12种不同的算法来跟踪视频和网络摄像头中的对象! 你会学到: 使用Python和OpenCV跟踪视频和网络摄像头中的对象 理解跟踪算法的基本直觉 实现12种跟踪算法 了解对象检测和对象跟踪之间的区 ...

  8. 热门 | Google Brain前员工深度盘点2017人工智能和深度学习各大动态

    翻译 | AI科技大本营 参与 | shawn 编辑 | Donna 2017年是人工智能井喷的一年.Google Brain团队前成员Denny Britz在自己的博客WILDML上对过去一年人工智 ...

  9. 首次公开!深度学习在知识图谱构建中的应用

    在智能化时代的今天,搜索引擎不仅能理解用户检索的信息.并总结出与搜索话题相关的内容,更在逐步构建一个与搜索结果相关的完整知识体系,让用户获得意想不到的发现.神马搜索的知识图谱与应用团队就在这条路上不断 ...

最新文章

  1. poj3007(set的应用)
  2. 一文讲清,MySQL的执行计划
  3. 【Webview相关问题】登陆失败之cookie陷阱
  4. AseoZdpAseo.init(this, AseoZdpAseo.INSERT_TYPE);
  5. 向线程传递数据与线程用回调方法检索数据
  6. 多个输出用java怎么写_请问用java写程序怎么输出这两个图形
  7. HDU - 6899 Xor(数位dp)
  8. 【Ubuntu】ubuntu系统下python3和python2环境自由切换
  9. FileNet入门学习
  10. MyEclipse使用阿里p3c代码规范
  11. 《五分钟商学院》个人篇学习总结(下)
  12. 编译开源路由下iNode客户端njit8021xclient
  13. apple与android传数据线,可以同时插安卓和苹果的数据线
  14. 云南计算机一级c类基础知识,云南省大学计算机一级C类多选题及答案.pdf
  15. 多通道声源定位方法之GCC-PHAT:原理及matlab实现
  16. 晨风机器人发送图片_晨风机器人基本使用说明
  17. Iptables DNAT实现broadcast与unicast之间相互映射
  18. 仿百度,谷歌输入框自动提示功能
  19. 新浪新闻评论系统的架构演进和经验总结
  20. 【某OTA网站加密参数还原生成】

热门文章

  1. 普通线性回归/岭回归/lasso回归[x.T/np.dot/lrg.coef_/lrg.intercept_/Xw = y/r2_score]
  2. 自动行为操控(Steering)(一)—框架
  3. 2021-07-24 第二周CTF学习总结
  4. 概率论:参数估计——点估计
  5. 消除Flash Player广告推送
  6. 各种光学仪器成像技术(下)
  7. 【算法与数据结构】—— 博弈论(初级篇之巴什博弈)
  8. Python自学路线图之Python系统自学
  9. c#工业自动化通信开发库,工业自动软件必备的基本程序
  10. cdkjava | 绘制含有丰富信息的化学反应