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 代码部分:

1 public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase

2 {

3 private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock;

4 private List imgList = new List();

5 private CogCopyRegionTool imageStitcher = new CogCopyRegionTool();

6 private CogIDTool idTool;

7

8 public override bool GroupRun(ref string message, ref CogToolResultConstants result)

9 {

10 //if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();

11 imgList.Clear();

12

13 // Run each tool using the RunTool function

14 foreach(ICogTool tool in mToolBlock.Tools)

15 {

16 if(tool is CogImageFileTool)

17 {

18 //如果是真实现场的相机,这里需要改成CogAcqFifoTooL

19 CogImageFileTool imageTool = (CogImageFileTool) tool;

20 imageTool.Run();

21 if(imageTool.OutputImage != null)

22 {

23 //将所有采到的图像,按上往下的顺序,依次保存在List集合中

24 imgList.Add((CogImage8Grey)imageTool.OutputImage);

25 }

26 }

27 }

28

29 CogImage8Grey img = new CogImage8Grey();

30 img.Allocate(imgList[0].Width * 2, imgList[0].Height * 2);

31

32 //指定画框

33 imageStitcher.DestinationImage = img;

34

35 imageStitcher.Region = null;

36 imageStitcher.RunParams.ImageAlignmentEnabled = true;

37

38 for (int i = 0; i < 4; i++)

39 {

40 //这里指定图像存放在画框中的起始XY点,然后程序跳转到if else下面

41 //将当前遍历到的照片贴进画框中

42 if(i == 0)

43 {

44 imageStitcher.RunParams.DestinationImageAlignmentX = 0;

45 imageStitcher.RunParams.DestinationImageAlignmentY = 0;

46 }

47 else if(i == 1)

48 {

49 imageStitcher.RunParams.DestinationImageAlignmentX = imgList[i].Width;

50 imageStitcher.RunParams.DestinationImageAlignmentY = 0;

51 }

52 else if(i == 2)

53 {

54 imageStitcher.RunParams.DestinationImageAlignmentX = 0;

55 imageStitcher.RunParams.DestinationImageAlignmentY = imgList[i].Height;

56 }

57 else

58 {

59 imageStitcher.RunParams.DestinationImageAlignmentX = imgList[i].Width;

60 imageStitcher.RunParams.DestinationImageAlignmentY = imgList[i].Height;

61 }

62 //将当前遍历到的图像贴进画框中

63 imageStitcher.InputImage = CogImageConvert.GetIntensityImage(imgList[i], 0, 0, imgList[i].Width, imgList[i].Height);

64 imageStitcher.Run();

65 }

66 mToolBlock.Outputs[0].Value = imageStitcher.OutputImage;

67

68 // Read ID Tool

69 idTool= mToolBlock.Tools["CogIDTool1"] as CogIDTool;

70 idTool.InputImage = (CogImage8Grey) mToolBlock.Outputs[0].Value;

71 idTool.Run();

72

73 return false;

74 }

75 }

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

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

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

相关推荐

Erazer X310 I545908GSD120G-D(A)(单主机)
365bet体育在线赌场

Erazer X310 I545908GSD120G-D(A)(单主机)

📅 01-24 👁️ 794
火山小视频怎么赚钱?盘点火山小视频赚钱的5种方法
精准原创123656官方网

火山小视频怎么赚钱?盘点火山小视频赚钱的5种方法

📅 07-17 👁️ 766
微信聊天不再尴尬!一招关闭“正在输入”提示
精准原创123656官方网

微信聊天不再尴尬!一招关闭“正在输入”提示

📅 09-11 👁️ 2670
平板电脑打字变慢了怎么办
365游戏注册

平板电脑打字变慢了怎么办

📅 08-25 👁️ 9574
2025雪莲香烟多少钱一盒(雪莲香烟价格表)
365游戏注册

2025雪莲香烟多少钱一盒(雪莲香烟价格表)

📅 01-02 👁️ 8051
戽的解释
365bet体育在线赌场

戽的解释

📅 10-13 👁️ 7280
将图像调整到 100 KB
精准原创123656官方网

将图像调整到 100 KB

📅 09-18 👁️ 4496
2025 年最佳代码管理工具对比:哪款工具最适合你?
探秘扇贝的世界:种类、养殖、营养与烹饪全解析
精准原创123656官方网

探秘扇贝的世界:种类、养殖、营养与烹饪全解析

📅 01-26 👁️ 6162