当前位置:   article > 正文

VisionPro_9.5中多图像拼接简单操作_visionpro 图像拼接

visionpro 图像拼接

应用场景:

比如在一个视觉项目应用中,由于FOV过大,单相机像素精度不能满足预期,那么就需要分开布局多个相机拍摄。但是如果涉及到测量,定位,计数等类似应用的时候,图像拼接技术则显的非常重要。
这里模拟四台相机分别拍摄一组二维码图像,然后将四张图拼接成为一张图,最后实现读码的功能。
实现功能:
在这里插入图片描述

1. 准备4张图像
在这里插入图片描述
2. 在VisionPro中新建一个ToolBlock,然后添加4个CogImageFileTool工具
在这里插入图片描述
3. 然后依次加载上面准备好的4张图像
在这里插入图片描述
注意:这里用CogImageFileTool工具模拟真实环境中4台相机,真实环境中
只需要将CogImageFileTool替换成CogAcqFifoTool,然后为每个CogAcqFifoTool工具分配一台相机即可。

4. 添加CogIDTool工具,用于读取拼接后图像的二维码
在这里插入图片描述
这里的InputImage可以暂时不用引用,后面直接在脚本中赋值即可。

5. 重点部分:为ToolBlock编写脚本

5.1 添加程序集Dll
在这里插入图片描述
5.2 引用命名空间:
在这里插入图片描述
5.3 代码部分:

public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase
{
  private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;
  private List<CogImage8Grey> imgList = new List<CogImage8Grey>();
  private CogCopyRegionTool imageStitcher = new CogCopyRegionTool();
  private CogIDTool idTool;
    
  public override bool GroupRun(ref string message, ref CogToolResultConstants result)
  {
    //if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();
    imgList.Clear();
   
    // Run each tool using the RunTool function
    foreach(ICogTool tool in mToolBlock.Tools)
    {
      if(tool is CogImageFileTool)
      {
        //如果是真实现场的相机,这里需要改成CogAcqFifoTooL
        CogImageFileTool imageTool = (CogImageFileTool) tool;
        imageTool.Run();
        if(imageTool.OutputImage != null)
        {
          //将所有采到的图像,按上往下的顺序,依次保存在List集合中
          imgList.Add((CogImage8Grey)imageTool.OutputImage);
        }
      }
    }
    
    CogImage8Grey img = new CogImage8Grey();
    img.Allocate(imgList[0].Width * 2, imgList[0].Height * 2);
    
    //指定画框
    imageStitcher.DestinationImage = img;
    
    imageStitcher.Region = null;
    imageStitcher.RunParams.ImageAlignmentEnabled = true;
    
    for (int i = 0; i < 4; i++)
    {
      //这里指定图像存放在画框中的起始XY点,然后程序跳转到if else下面
      //将当前遍历到的照片贴进画框中
      if(i == 0) 
      {
        imageStitcher.RunParams.DestinationImageAlignmentX = 0;
        imageStitcher.RunParams.DestinationImageAlignmentY = 0;
      }
      else if(i == 1)
      {
        imageStitcher.RunParams.DestinationImageAlignmentX = imgList[i].Width;
        imageStitcher.RunParams.DestinationImageAlignmentY = 0;
      }
      else if(i == 2)
      {
        imageStitcher.RunParams.DestinationImageAlignmentX = 0;
        imageStitcher.RunParams.DestinationImageAlignmentY = imgList[i].Height;
      }
      else
      {
        imageStitcher.RunParams.DestinationImageAlignmentX = imgList[i].Width;
        imageStitcher.RunParams.DestinationImageAlignmentY = imgList[i].Height;
      }
      //将当前遍历到的图像贴进画框中
      imageStitcher.InputImage = CogImageConvert.GetIntensityImage(imgList[i], 0, 0, imgList[i].Width, imgList[i].Height);
      imageStitcher.Run();
    }
    mToolBlock.Outputs[0].Value = imageStitcher.OutputImage;
    
    // Read ID Tool
    idTool= mToolBlock.Tools["CogIDTool1"] as CogIDTool;
    idTool.InputImage = (CogImage8Grey) mToolBlock.Outputs[0].Value;
    idTool.Run();
    
    return false;
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

原理: 可以将CogCopyRegionTool对象想象成一个尚未完成的画框,因为要装4张图,所以首先需要确定画框尺寸 (一张图*2的大小)。
然后准备装照片进去了,拿到一张照片后,首先确定照片应该放置的位置 (第一张00,第二张10,第三张01,第四张11这样)。
在这里插入图片描述
确认完一张图像位置之后,则将当前的图片装入指定的位置,以此往复。

6. 最终,我们会得到一张全新的无缝拼接图片(为了便于展示直接通过代码的形式将其传入CogODTool工具的输入)
在这里插入图片描述
以上,如有错误,欢迎指正,谢谢。。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/637140
推荐阅读
相关标签
  

闽ICP备14008679号