应用场景:

比如在一个视觉项目应用中,由于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 functionforeach(ICogTool tool in mToolBlock.Tools){if(tool is CogImageFileTool){//如果是真实现场的相机,这里需要改成CogAcqFifoTooLCogImageFileTool 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 ToolidTool= mToolBlock.Tools["CogIDTool1"] as CogIDTool;idTool.InputImage = (CogImage8Grey) mToolBlock.Outputs[0].Value;idTool.Run();return false;}
}

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

确认完一张图像位置之后,则将当前的图片装入指定的位置,以此往复。

6. 最终,我们会得到一张全新的无缝拼接图片(为了便于展示直接通过代码的形式将其传入CogODTool工具的输入)

以上,如有错误,欢迎指正,谢谢。。。

VisionPro_9.5中多图像拼接简单操作相关推荐

  1. Neo4j离线环境搭建与基于python中py2neo的简单操作

    Neo4j离线环境搭建与基于python中py2neo的简单操作 1 安装与配置 1.1 Neo4j安装 1.2 python操作环境配置 2 Neo4j操作 2.1 创建: 创建点 创建点边: 2. ...

  2. python元素定位id和name_python中通过selenium简单操作及元素定位知识点总结

    浏览器的简单操作 # 导入webdriver模块 # 创建driver对象,指定Chrome浏览器 driver = webdriver.Chrome() # 窗口最大化 driver.maximiz ...

  3. Photoshop中的一些简单操作及制作

    一.快捷键 1.ctrl+alt+z返回 ctrl+z撤销 ctrl+s保存 ctrl+shift+s另存为 ctrl+x剪切 2.shift是有序的选择   ctrl键是无序的选择   ctrl+g ...

  4. .Net Core中使用NEST简单操作Elasticsearch

    C#中访问Elasticsearch主要通过两个包NEST和Elasticsearch.Net,NEST用高级语法糖封装了Elasticsearch.Net可以通过类Linq的方式进行操作,而Elas ...

  5. Photoshop中的一些简单操作及图片制作

    一.快捷键 1.ctrl+alt+z返回 ctrl+z撤销 ctrl+s保存 ctrl+shift+s另存为 ctrl+x剪切 2.shift是有序的选择   ctrl键是无序的选择   ctrl+g ...

  6. python中文件的简单操作

    一.mode="r" mode="r":一次性读取文本中全部的内容,以字符串的形式返回结果 read :读取内容 readline : 读取一行 readlin ...

  7. mysql数据库的简单操作

    一.启动mysql服务 1.启动mysql服务 win+R键打开运行,输入services.msc打开本地服务,找到MySQL,进行启动.停止等操作. 2.连接mysql 1.win+R键打开运行,输 ...

  8. 简单的计算机程序代码,优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能...

    优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能.编程语言中,数组是一个非常重要的概念,也是一种很常用的类型.本文中通过javascript语言的代码实例,展现编程中数组的魅力.在javasc ...

  9. mysql 操作表的例子,mysql中库和表的简单操作总结(附示例)

    本篇文章给大家带来的内容是关于mysql中库和表的简单操作总结(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一. 库的操作 1.创建数据库 创建数据库: create d ...

最新文章

  1. 序列信号产生器的verilog HDL 设计
  2. 优化我们的业务之Timecard
  3. 洛谷P1466 集合 Subset Sums
  4. (6)nginx:rewrite
  5. setModel 的核心逻辑
  6. 辅助类BinaryTreeNode(二叉树节点)
  7. 2021北京民营企业百强榜单发布 美团、水滴等公司入选
  8. linux yum libsasl2,CentOS8 yum 凡是安装 安装mysql +需要:libsasl2.so.2()(64bit)
  9. 利用wsdl.exe生成webservice代理类
  10. ext2、ext3、ext4文件系统区别
  11. 中小型企业网络IP地址规划案例-1
  12. centos设置自动开关机
  13. c语言制作单片机人机界面,基于51单片机自制触摸屏
  14. 林信良(良葛格)的专栏中的DWR入门好教程
  15. 图片太多怎么办?教你怎么批量压缩图片大小
  16. webrtc入门:14.pion webrtc中Data Channels示例
  17. 【标准】视频显示分辨率格式大全
  18. 厚物科技定制三屏加固便携机HW-8700TS
  19. 基于matlab的SMO实现
  20. 微软word如何插入页码_如何在Microsoft Word中使用页码

热门文章

  1. vue pc端实现 直播功能+弹幕
  2. InvalidArgumentError (see above for traceback): Invalid JPEG data, size 75244
  3. 在 Windows 上拥有舒适的码字体验,12 款 Markdown 写作工具推荐
  4. mac 终端启动 jboss 停留在(Starting) 不能启动joss
  5. 微型计算机控制系统听不懂,2019年4月成人自考微机控制技术真题及答案解析
  6. html5大富翁源码,VC++ 大富翁4_大富翁游戏源码
  7. 问题:显卡占用高,但使用率低
  8. Python提取PDF表格及文本!(附源码)
  9. 10-75 spj-查询至少使用s1供应商所供应的全部零件的工程 (10 分)
  10. Qt操作至少需要一个处于启用状态的有效资料档案库