首页 > 编程语言 >Halcon的HWindowControl控件在C#WinForm中的使用介绍(包括绘制ROI)

Halcon的HWindowControl控件在C#WinForm中的使用介绍(包括绘制ROI)

时间:2024-04-07 22:05:24浏览次数:13  
标签:控件 ROI C# HWindowControl Halcon HSmartWindowControl hSmartWindowControl1 imgHeig

Halcon的HSmartWindowControl控件在C#WinForm中的使用介绍(包括绘制ROI)

文章目录


Halcon的新版本中增加了HSmartWindowControl控件,该控件可以很方便的实现图像的缩放、拖拽、及自适应显示,虽然使用HSmartWindowControl控件虽然有诸多便利,但是该控件不支持传统HWindowControl的Draw_*函数,要想在该控件上实现ROI图形区域的绘制需要通过其他方式,本文中有详细叙述。实现的功能如下视频:

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="L0KsXZTz-1712413053720" src="https://live.csdn.net/v/embed/376657"></iframe>

Halcon的HWindowControl控件在C#WinF

一、 引入hSmartWindowControl控件

1、打开VS软件,在工具箱中右击,选择”选择项“,如下图所示:
在这里插入图片描述

2、打开“.Net FrameWork组件”,点击右下角“浏览”按钮,在halcon的安装目录中找到halcondotnet.dll,添加进来,打开目录如下图所示:
在这里插入图片描述
3、关闭此窗口,回到”工具箱“,可以看到"控件hSmartWindowControl"已经添加到工具箱了,可以像其他控件一样拖入到窗体中使用。如下图所示:
在这里插入图片描述

二、 编写打开图像功能

 //获取图像及显示窗口长宽
 HOperatorSet.GetImageSize(image, out HTuple imgWidth, out HTuple imgHeight);
 int wndWidth = hSmartWindowControl1.ClientRectangle.Width;
 int wndHeight = hSmartWindowControl1.ClientRectangle.Height;

 //计算比例
 double scale = Math.Max(1.0 * imgWidth.I / wndWidth, 1.0 * imgHeight / wndHeight);
 double w = wndWidth * scale;
 double h = wndHeight * scale;
 //居中时,Part的区域
 hSmartWindowControl1.HalconWindow.SetPart(-(h - imgHeight) / 2, -(w - imgWidth) / 2, imgHeight + (h - imgHeight.D) / 2, imgWidth + (w - imgWidth) / 2);

 //背景色
 hSmartWindowControl1.HalconWindow.SetWindowParam("background_color", "black");
 hSmartWindowControl1.HalconWindow.ClearWindow();

 hSmartWindowControl1.HalconWindow.DispObj(image);

如下图所示:
在这里插入图片描述
在这里插入图片描述

三、 编写绘制ROI功能

 //创建一个矩形的显示实例
 DoRoi = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE1, 500, 500,  1000, 1000);
 DoRoi.SetDrawingObjectParams("color", "green");
 //挂靠实例到HSmartWindowControl控件
 hSmartWindowControl1.HalconWindow.DetachDrawingObjectFromWindow(doRoi);
 //获取矩形参数
string[] str = { "row1", "column1", "row2", "column2" };
HTuple val = DoRoi.GetDrawingObjectParams(str);

//生成ROI
HOperatorSet.GenRectangle1(out HObject roi, val[0], val[1], val[2], val[3]);
HOperatorSet.ReduceDomain(m_SrcImage, roi, out HObject imageROI);
 ShowImage(imageROI);

点击画ROI按钮,如图所示:
在这里插入图片描述
点击生成REGION按钮,如图所示:
在这里插入图片描述

四、源程序下载

源程序下载地址: Halcon的HWindowControl控件在C#WinForm中的使用介绍(包括绘制ROI)

标签:控件,ROI,C#,HWindowControl,Halcon,HSmartWindowControl,hSmartWindowControl1,imgHeig
From: https://blog.csdn.net/fallingleafgrief/article/details/137437817

相关文章

  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
    目录关键词平台说明背景一、implicitsynchronization1.1Writerequests流程(NvM_WriteBlock)1.2Readrequests流程(NvM_ReadBlock)1.3Restoredefaultrequests流程(NvM_RestoreBlockDefaults)1.4Multiblockreadrequests流程(NvM_ReadAll)1.5Multibloc......
  • C++笔记打卡第五天(指针、结构体)
    1.指针inta=10;//指针定义的语法:数据类型*指针变量名int*p;p=&a;//也可以直接定义为:int*p=&acout<<&a<<endl;cout<<p<<endl;//可以通过解引用的方式来找到指针指向的内存(可以修改a的值)*p=1000;cout<<*p<<endl;cout<<a<&......
  • 设计模式|责任链模式(Chain of Responsibility Pattern)
    文章目录结构优点缺点使用责任链的步骤示例有哪些知名框架采用了责任链模式责任链模式和链表有什么关联常见面试题责任链模式(ChainofResponsibilityPattern)是一种行为设计模式,它允许你创建一个对象链。请求将沿着这个链传递,直到有一个对象处理它为止。这种模式可以......
  • STM32CubeMX+MDK通过I2S接口进行音频输入输出(全双工读写一个DMA回调)
    一、前言目前有一个关于通过STM32F411CEUx的I2S总线接口控制SSS1700芯片进行音频输入输出的研究。SSS1700是具有片上振荡器的3S高度集成的USB音频控制器芯片。SSS1700功能支持96KHz24位采样率,带外部音频编解码器(24位/96KHzI2S输入和输出)并具有内置立体声16/24......
  • Pytorch张量的数学运算:向量基础运算
    文章目录一、简单运算二、广播运算1.广播的基本规则2.广播操作的例子三、运算函数参考:与凤行  张量的数学运算是深度学习和科学计算中的基础。张量可以被视为一个多维数组,其在数学和物理学中有广泛的应用。这些运算包括但不限于加法、减法、乘法、除法、内积、......
  • C++笔记打卡第六天(通讯录管理系统)
    1.结构体案例1每名老师带领5个学生,总共有3个老师。设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员。学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值。最终打印出老师数据以及老师所带学生数据。#......
  • P7929 [COCI2021-2022#1] Logičari
    P7929[COCI2021-2022#1]Logičari基环树dp基环树dp类似树形dp,大致思路是把环断开,分类讨论之后树形dp。如果在树上做这题,设\(f_{u,0/1,0/1}\)表示考虑到\(u\)结点,\(u\)结点否/是染色、\(fa_u\)否/是染色的最小染色点数。转移有:\(fa_u\)被染色了,\(f_{u,0/1,1}=\su......
  • C++ Break、Continue 和 数组操作详解
    C++Break和Continuebreak语句还可以用来跳出循环。在以下示例中,当i等于4时跳出循环:for(inti=0;i<10;i++){if(i==4){break;}cout<<i<<"\n";}C++Continue以下示例跳过了值为4的情况:for(inti=0;i<10;i++){if(i==4)......
  • P9732 [CEOI2023] Trade
    题意一个区间,你需要在其中选出一段大于\(k\)的区间。使得前\(k\)大的\(s_i\)减去区间\(c_i\)之差最大。问,价值最大是多少,以及哪些点可以成为被选择的价值最大的区间的前\(k\)大的点。Sol摆摆摆,颓颓颓。注意到有决策单调性,考虑怎么证明。显然,设\(f_i=\maxw(i,......
  • 基于So-VITS-SVC4.1声音克隆几种不同的推理方法
    之前一直没时间整理,现在抽了点时间整理一下这个声音克隆的几种非webui的启动方式。文章目录命令行方式API调用方式命令行方式这里需要在inference_main.py中将参数都修改成在页面点击操作时候对应的即可。defmain():importargparseparser=argpars......