【VM服务管家】VM4.0平台SDK_2.2 模块API类

2.2.1 方案保存:方案高速保存的方法

描述
环境:VM4.0.0 + VS2015及以上
现象:二次开发软件调用VmSolution.Export(string Path)接口保存方案,保存时间较长。
解答
保存方案将接口参数bDisplayProgress置为false,或放在线程里调用。示例代码如下:

C#
VmSolution.Export(tb_SolPath.Text, "", false);

问题根因
不熟悉方案的相关接口

2.2.2 Group模块:Group输入输出图像数据的方法

描述
环境:VM4.0.0 + VS2015及以上
现象:Group 模块可以设置输入和输出,那如何进行图像数据的输入和输出?
解答
Group相当于一个模块,实例化Group,通过相关接口可以设置图像数据的输入和输出。
1)设置图像数据的输入,下面是以独立的Group为例,导入一个后缀为gro的独立Group。

C#
IMVSGroupTool group=null;
//加载group模块
group = IMVSGroupTool.LoadGroup(@"C:\Users\zhouyigen\Desktop\LackImage.gro", "");
//利用OpenCV的读图方法,读取图像
Mat matImage = Cv2.ImRead(@"C:\Users\zhouyigen\Desktop\Demo(2)\smile.png",ImreadModes.Grayscale);
//实例化VM接口可接收的图像类型
InputImageData StImg = new InputImageData();
//设置图像参数
StImg.Names.DataName = "Imagein";
StImg.Names.HeightName = "ImageHeightin";
StImg.Names.WidthName = "ImageWidthin";
StImg.Names.PixelFormatName = "ImagePixelFormatin";
StImg.Height = matImage.Rows;
StImg.Width = matImage.Cols;
StImg.Pixelformat = ImagePixelFormat.IMAGE_PIXEL_FORMAT_MONO8;
StImg.DataLen = (uint)(matImage.Width * matImage.Height);
StImg.Data = new byte[matImage.Width * matImage.Height];
 
//将读取到的图像拷贝给StImg
Marshal.Copy(matImage.Data, StImg.Data, 0, matImage.Width * matImage.Height);
// 设置图像数据
group.ModuParams.SetInputImage(StImg); 
//绑定渲染源
vmRenderControl1.ModuleSource = group;

也可以将流程中的Group实例化,再使用流程的SetInputImage接口。流程中的Group中没有图像源模块,Group的输入设置如下图,Group中的其他模块需要选择图像输入源,需要提前建立联系。
在这里插入图片描述

2)获取输出的图像数据
可以参考2.4.1,给Group中添加一个输出图像模块,通过输出图像模块来获取输出的图像数据byte。
也可以配置Group的显示设置,订阅输出图像模块,再依照2.4.1中获取流程中的图像数据方法,Imgaeout才是真正的图像名称。像素格式17301505为MONO8灰度图,像素格式 35127316为RGB24彩色图。
在这里插入图片描述

问题根因
不熟悉针对Group模块如何输入输出图像数据

2.2.3 模块操作类:设置输入图像、参数和ROI的方法

描述
环境:VM4.0.0 + VS2015及以上
现象:每个模块类型命名不同,但拥有部分共同的相关操作。
解答
1 给模块设置输入图像,对应VM中模块的图像输入源功能,以圆查找模块为例 。注意:设置输入参数(基本参数),参数配置窗口界面不会显示所设置的参数,此时模块运行,参数永久有效,流程运行,参数一次有效;设置运行参数,参数配置窗口界面会显示所设置的参数,此时模块和流程运行,参数都永久有效。
在这里插入图片描述

C#
//VisionMaster4.0.0\Development\V4.0.0\ComControls\bin\x64中包含OpenCvSharp.dll
Mat matImage = Cv2.ImRead(path, ImreadModes.Grayscale);//使用opencv读图,也可以使用BitMap读图
InputImageData StImg = new InputImageData();
StImg.Names.DataName = "InImage";//只能使用默认名称InImage
StImg.Names.HeightName = "InImageHeight";//默认InImageHeight
StImg.Names.WidthName = "InImageWidth";//默认InImageWidth
StImg.Names.PixelFormatName = "InImagePixelFormat";//默认InImagePixelFormat
StImg.Height = matImage.Rows;
StImg.Width = matImage.Cols;
StImg.Pixelformat = ImagePixelFormat.IMAGE_PIXEL_FORMAT_MONO8;
StImg.DataLen = (uint)(matImage.Width * matImage.Height);
StImg.DataLen = (uint)(matImage.Width * matImage.Height);
Marshal.Copy(matImage.Data,StImg.Data,0,matImage.Width*matImage.Height);
IMVSCircleFindModuTool Circle = (IMVSCircleFindModuTool)process["圆查找1"];
Circle.ModuParams.SetInputImage(StImg);

2 配置参数,实例化模块为tool,然后设置tool.ModuParams的属性。这里以圆查找模块为例。如果没有相应的属性,则需要联系销售进行定制。

C#
IMVSCircleFindModuTool tool = (IMVSCircleFindModuTool)VmSolution.Instance[“流程1.圆查找1”];
tool.ModuParams.RadNum=10;// 卡尺数量

3 设置ROI,这里以DL字符识别CPU模块为例,代码如下,其中0.5f是比例关系(将图像看作1)。

C#
public void OCRROISetFunc(ref VMControls.WPF.Release.VmRenderControl vmRenderControl1)
{
    /OCRROISET
    MVSOcrDlModuCTool iMVSOcrDlModuCTool = (IMVSOcrDlModuCTool)VmSolution.Instance["流程1.DL字符识别C1"];

    RoiBox roiBox = new RoiBox();
    roiBox.bRoiType = (byte)RoiType.ROI_TYPE_BOX;
    roiBox.fCenterX = 0.5f;
    roiBox.fCenterY &#
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值