目录
- 3.3.1 位置修正:位置修正算子工具的使用方法
- 3.3.2 模板保存:实现模板自动加载的方法
- 3.3.3 模板匹配: 获取模板匹配框和轮廓点的方法
- 3.3.4 模板训练:模板训练执行完成的判断方法
- 3.3.5 图像相减:算子SDK开发图像相减的方法
- 3.3.6 图像修正:图像修正工具的使用方法
- 3.3.7 Blob工具:Blob工具的使用方法
- 3.3.8 点点测量:点点测量工具的使用方法
- 3.3.9 亮度测量:亮度测量工具的使用方法
- 3.3.10 圆查找:圆查找的方法
- 3.3.11 仿射变换:图像仿射变换的使用方法
- 3.3.12 直线查找:直线查找工具的使用方法
- 3.3.13 缺陷检测:直线边缘缺陷检测工具的使用方法
- 3.3.14 N点标定:N点标定的使用方法
- 3.3.15 畸变校正:畸变校正的使用方法
- 3.3.16 字符识别:多线程同时读取同一个本地模型的方法
- 3.3.17 字符识别:VM自带字符识别模型的区分
- 3.3.18 设置掩膜:给模块设置掩膜的方法
3.3.1 位置修正:位置修正算子工具的使用方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:位置修正工具使用方法
解答
示例代码如下:
1. C#
2.
3. bool re = true;
4. //位置修正基准参数
5. CPositionFixTool PosFixToolObj = new CPositionFixTool();
6. CPositionFixBasicParam BasicParam = PosFixToolObj.BasicParam;
7. VisionDesigner.PositionFix.MVD_FIDUCIAL_POINT_F stBasinInit = new VisionDesigner.PositionFix.MVD_FIDUCIAL_POINT_F();
8. stBasinInit.stPosition.fX = MatchPoint.X;
9. stBasinInit.stPosition.fY = MatchPoint.Y;
10. stBasinInit.fAngle = Angle;
11. BasicParam.BasePoint = stBasinInit;//设置基准点
12. //位置修正运行参数
13. VisionDesigner.PositionFix.MVD_FIDUCIAL_POINT_F stBasicRun = new VisionDesigner.PositionFix.MVD_FIDUCIAL_POINT_F();
14. stBasicRun.stPosition.fX = stPositionfX;
15. stBasicRun.stPosition.fY = stPositionfY;
16. stBasicRun.fAngle = stPositionAngle;
17. BasicParam.RunningPoint = stBasicRun;//设置运行点
18. //获取工具位置修正后Roi
19. MVD_SIZE_I stImageSize = new MVD_SIZE_I();
20. stImageSize.nWidth = ImageWidth;
21. stImageSize.nHeight = ImageHeight;
22. BasicParam.RunImageSize = stImageSize;
23. BasicParam.FixMode = MVD_POSFIX_MODE.MVD_POSFIX_MODE_HVA;
24. PosFixToolObj.BasicParam.InitialShape = SrcRegionROI;
25. PosFixToolObj.Run();
26. DesRegionROI = PosFixToolObj.Result.CorrectedShape;
问题根因
不熟悉位置修正算子工具使用方法
3.3.2 模板保存:实现模板自动加载的方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
问题:用户在使用算子SDK开发的模板匹配功能时,希望能在程序运行时可以自动加载之前训练过的模板。
解答
可以使用模板的导入导出方法,步骤如下:
第一步:程序初始化时导入模板
1. C#
2.
3. public FrmMain()
4. {
5. InitializeComponent();
6. if (File.Exists(savePatternPath))//判断文件是否存在
7. {
8. pattern.ImportPattern(savePatternPath);
9. }
10. }
第二步:加载模板训练窗口时进行赋值
11. C#
12.
13. private void FrmTempleteMatch_Load(object sender, EventArgs e)
14. {
15. mvdAlmightyPatternEdit1.SetSubject(savePattern);
16. }
第三步:在关闭训练窗口时导出模板:
17. C#
18.
19. private void FrmTempleteMatch_FormClosing(object sender, FormClosingEventArgs e)
20. {
21. savePattern.ExportPattern(savePatternPath);
22. }
问题根因
不熟悉SDK算子的相关方法。
3.3.3 模板匹配: 获取模板匹配框和轮廓点的方法
描述
环境:MVDAlgrithm SDK3.4及以上 + VS2013及以上
现象:如何获取模板匹配轮廓点?
解答
依次实例化模板匹配工具、设置输入图像、设置ROI、运行、获取匹配点、轮廓点,示例代码如下:
C#
cHPFeaturePattern = new CHPFeaturePattern();
cHPFeaturePatMatchTool.InputImage = cMvdImage;
cHPFeaturePatMatchTool.Pattern = cHPFeaturePattern;
cHPFeaturePatMatchTool.ROI = cROI;
cHPFeaturePatMatchTool.BasicParam.ShowOutlineStatus = true; // 显示轮廓
cHPFeaturePatMatchTool.Run();
CHPFeaturePatMatchResult cHPFeaturePatMatchResult = cHPFeaturePatMatchTool.Result;
var OutlineList = cHPFeaturePatMatchResult.OutlineList;
foreach (var item in cHPFeaturePatMatchResult.MatchInfoList)
{
var matchBox = new CMvdRectangleF(item.MatchBox.CenterX, item.MatchBox.CenterY, item.MatchBox.Width, item.MatchBox.Height);
matchBox.Angle = item.MatchBox.Angle;
matchBox.BorderColor = new MVD_COLOR(255, 0, 0, 255);
mvdRenderActivex1.AddShape(matchBox);
}
if (cHPFeaturePatMatchTool.BasicParam.ShowOutlineStatus)
{
foreach (var item in cHPFeaturePatMatchResult.OutlineList)
{
CMvdPointSetF pointSetG = new CMvdPointSetF();
CMvdPointSetF pointSetY = new CMvdPointSetF();
CMvdPointSetF pointSetR = new CMvdPointSetF();
foreach (var point in item.EdgePointList)
{
if (0 == point.Score)
{
pointSetG.AddPoint(point.Position.fX, point.Position.fY);
}
else if (1 == point.Score)
{
pointSetY.AddPoint(point.Position.fX, point.Position.fY);
}
else if (2 == point.Score)
{
pointSetR.AddPoint(point.Position.fX, point.Position.fY);
}
}
pointSetG.BorderColor = new MVD_COLOR(0, 255, 0, 255);//绿色得分高的点
pointSetY.BorderColor = new MVD_COLOR(255, 255, 0, 255);//黄色得分低的点
pointSetR.BorderColor = new MVD_COLOR(255, 0, 0, 255);//红色丢弃的点
if (0 != pointSetG.PointsList.Count)
{
mvdRenderActivex1.AddShape(pointSetG);
matchOutline