首页 > 编程语言 >C#联合halcon实现connection后的物料上色、物料计数、物料框选

C#联合halcon实现connection后的物料上色、物料计数、物料框选

时间:2024-08-21 21:24:04浏览次数:8  
标签:物料 HOperatorSet C# Region halcon Threshold 参数 rectangleDef out

一、效果预览

二、实现步骤

三、代码部分

ReadImage

Threshold

HalconWindowShowImage

RectangleDef类库

GenRectangle

 public static void GenRectangle(HObject Region, out HObject ExternalRegion, out RectangleDef rectangleDef, bool isMargin, HWindow hWindow)
 {
     if (isMargin == true)
     {
         HOperatorSet.SetDraw(hWindow, "margin");
     }
     else
     {
         HOperatorSet.SetDraw(hWindow, "fill");
     }
     rectangleDef = new RectangleDef();
     HOperatorSet.SmallestRectangle2(Region, out rectangleDef._CenterRow, out rectangleDef._CenterCol, out rectangleDef.Angle, out rectangleDef.len1, out rectangleDef.len2);
     HOperatorSet.GenRectangle2(out ExternalRegion, rectangleDef._CenterRow, rectangleDef._CenterCol, rectangleDef.Angle, rectangleDef.len1, rectangleDef.len2);
 }

ShowText

主函数中的调用

 private HObject ho_image;
 private void button_test_Click(object sender, EventArgs e)
 {

     OpenFileDialog openFileDialog = new OpenFileDialog();
     if (openFileDialog.ShowDialog() == DialogResult.OK)
     {
         bool result = Algorithm.ImageHelp.ReadImage(out ho_image, openFileDialog.FileName, hWindowControl1.HalconWindow);
         if (result != true)
         {
             MessageBox.Show("失败");
         }
     }
 }
**********************************************************************************************************************************************************************************HTuple MaxGray;
 HTuple MinGray;
 HObject Region;
 private void button_Threshold_Click(object sender, EventArgs e)
 {
     hWindowControl_Threshold.HalconWindow.ClearWindow();

     //普通阈值分割
     MaxGray = int.Parse(textBox_MaxGray.Text);
     MinGray = int.Parse(textBox_MinGray.Text);
     Algorithm.ImageHelp.Threshold(ho_image, out Region, MinGray, MaxGray);

     //获得图片宽度和高度
     HTuple width, height;
     HOperatorSet.GetImageSize(ho_image, out width, out height);

     //设置显示范围
     HOperatorSet.SetPart(hWindowControl_Threshold.HalconWindow, 0, 0, height - 1, width - 1);

     //显示图片 
     HOperatorSet.DispObj(Region, hWindowControl_Threshold.HalconWindow);

 }
**********************************************************************************************************************************************************************************
 private void button1_Click(object sender, EventArgs e)
 {

     string[] Color = new string[12] { "red", "green", "blue", "cyan", "magenta", "yellow", "coral", "spring green", "orange", "orange red", "pink", "navy" };

     HObject ConnectionRegion;
     HOperatorSet.Connection(Region, out ConnectionRegion);


     HObject RRegion;
     Algorithm.RectangleDef rectangleDef;
     Algorithm.ImageHelp.GenRectangle(ConnectionRegion, out RRegion, out rectangleDef, true, hWindowControl_Threshold.HalconWindow);
     HTuple nums;
     HOperatorSet.CountObj(RRegion, out nums);
     Algorithm.ImageHelp.HalconWindowShowImage(ho_image, RRegion, hWindowControl_Threshold.HalconWindow, Color);
     string str = "齿轮的数量" + nums.ToString();
     Algorithm.ImageHelp.ShowText(str, hWindowControl_Threshold.HalconWindow, 12, 12);
 }

四、参数讲解


第一个参数的读取到的图片--->第二个参数是处理后输出的图片Region,因为Threshold算子中两个参数为灰度值的最大值和最小值,范围0-255,所以要设置两个Int类型的参数来接收


第一个参数的读取到的图片--->第二个参数是处理后输出的图片Region,第三个参数为显示的窗体句柄,第四个参数为connection后的物料单独上色


第一个参数的读取到的Region--->第二个参数是处理后输出的图片ExternalRegion,第三个参数为选用的绘制函数,第四个参数是是否需要填充,第五个参数为显示的窗体句柄


第一个参数是显示的文本内容,第二个参数是显示的窗体句柄,第三第四个参数是在哪个坐标下显示

标签:物料,HOperatorSet,C#,Region,halcon,Threshold,参数,rectangleDef,out
From: https://blog.csdn.net/m0_70785017/article/details/141402657

相关文章

  • 【TCP】核心机制:滑动窗口、流量控制和拥塞控制
    文章目录滑动窗口窗口滑动滑动窗口丢包流量控制拥塞控制窗口大小变化过程滑动窗口有一类算法题,就是通过滑动窗口的思想来解决的,算法中的“滑动窗口”借鉴自TCP的滑动窗口TCP是要保证可靠传输的==>代价,降低了传输的效率(重传,确认重传等操作)TCP希望能在可靠传输......
  • 【学习笔记】 陈强-机器学习-Python-Ch11 决策树(Decision Tree)
    系列文章目录监督学习:参数方法【学习笔记】陈强-机器学习-Python-Ch4线性回归【学习笔记】陈强-机器学习-Python-Ch5逻辑回归【课后题练习】陈强-机器学习-Python-Ch5逻辑回归(SAheart.csv)【学习笔记】陈强-机器学习-Python-Ch6多项逻辑回归【学习笔记及课后......
  • YSP_refs_cn_2010_RA
    rhTNFR-Fc中文文献-2010-RA 类风湿关节炎 随机对照试验[1–8][1]陈国威,胡志国,陈艳.注射用重组人Ⅱ型肿瘤坏死因子受体-抗体融合蛋白联合甲氨蝶呤、来氟米特治疗类风湿性关节炎的队列研究.中国医学创新,2010,7(26):7-9.浏览文摘[2]古永明,丁喜瑞.中药内外兼......
  • AtCoder Beginner Contest 046
    A-AtCoDeerandPaintCans#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ ios::sync_with_stdio(false),cin.tie(nullptr); set<int>s; for(inti=0;i<3;i++){ intx; cin>>x; s.inser......
  • [SCOI2014] 方伯伯的玉米田 题解
    对于每次修改的区间以及其左边序列和右边序列,共三种情况:1.区间内比两侧低的还是低2.区间内比两侧低的变得比两侧高了3.区间内比两侧高的还是高那么现在又面临一个问题:在区间内变化后,对答案,即最长不下降子序列有什么影响。对区间左边:可能会使其最长不下降子序列增长对区间......
  • IPC对象通信方式---共享内存 | 网络通信 -编程
    共享内存共享内存机制其允许两个或多个进程共享一个给定的存储区,这一段存储区可以被两个或两个以上的进程映射至自身的地址空间中,一个进程写入共享内存的信息,可以被其他使用这个共享内存的进程,通过一个简单的内存读取错做读出,从而实现了进程间的通信。是内核预留的内存空间,最......
  • ASP.NET Core 6.0 ServiceCollection 实现依赖注入
    ASP.NETCore6lOC容器控制反转(InversionofControl,IoC)是一种软件设计模式,其目的是降低代码之间的耦合度。在C#中,可以使用依赖注入(DependencyInjection,DI)来实现控制反转。一般系统分为UI层、BLL层、DAL层、IBLL层和IDAL层,IOC实质是通过抽象IBLL(接口、抽象类......
  • Linux系统下CUDA与tensorflow与python的版本对应关系
    LinuxCPUVersionPythonversionCompilerBuildtoolstensorflow-2.16.13.9-3.12Clang17.0.6Bazel6.5.0tensorflow-2.15.03.9-3.11Clang16.0.0Bazel6.1.0tensorflow-2.14.03.9-3.11Clang16.0.0Bazel6.1.0tensorflow-2.13.03.8-3.11Clang16.0.0Bazel5.3.0tensorflow-2.......
  • 掌握C++中的std::list:高效处理插入与删除的最佳选择
    在C++标准模板库(STL)中,std::list是一个非常重要的容器,属于序列式容器。与std::vector和std::deque不同,std::list是一个双向链表(doublylinkedlist),其设计更适合于频繁的插入和删除操作,而不是随机访问。本文将深入探讨std::list的实现原理、使用场景以及与其他容器的对比......
  • [赛记] 暑假集训CSP提高模拟24
    与和100pts签到题但还是做了很久。。。考虑与的条件,可以发现,如果将$a$转化成二进制,那么二进制上为$1$的位置$x$和$y$都必须是$1$,所以首先将$s$减去$2\timesa$,然后再判断一下$(s-2\timesa)\operatorname{and}a$是否为$0$即可;赛时用......