• 上位机模块之halcon绘制ROI与获取ROI,在hsmartwindow实现


    上位机中通常需要使用到绘制ROI模块或者获取已经绘制好的ROI区域的参数,在这里通过使用hsmartwindow窗体控件进行对ROI的绘制和获取。
    先上代码:

    /// 
            /// 创建ROI
            /// 
            /// 传入HSmartWindowControl
            /// 需要绘制的ROI类型
            /// 绘制好的ROI参数,传出
            public void Set_DrawHalconROI(HSmartWindowControl Win, HDrawingObject.HDrawingObjectType ROItype, out HDrawingObject drawingObject
                                            )
            {
                switch (ROItype)
                {
                    case HDrawingObject.HDrawingObjectType.CIRCLE:
                        drawingObject = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.CIRCLE, 500, 500, 300);
                        Win.HalconWindow.AttachDrawingObjectToWindow(drawingObject);
                        break;
    
                    case HDrawingObject.HDrawingObjectType.RECTANGLE2:
                        drawingObject = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.RECTANGLE2, 500, 500, 0, 500, 500);
                        Win.HalconWindow.AttachDrawingObjectToWindow(drawingObject);
                        break;
    
                    case HDrawingObject.HDrawingObjectType.LINE:
                        drawingObject = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.LINE, 200, 200, 500, 500);
                        Win.HalconWindow.AttachDrawingObjectToWindow(drawingObject);
                        break;
                    default:
                        drawingObject = null;
                        break;
                }
            }
    
    • 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
    /// 
            /// 获取ROI参数
            /// 
            /// 需要输入的ROI类型
            /// 传入的ROI对象参数
            /// 输出结果double数组
            /// 输出ROI形状,Hobject类型
            public void Get_DrawHalconROI(HDrawingObject.HDrawingObjectType ROItype, HDrawingObject drawingObject
                                            , out double[] Result, out HObject HROI)
            {
                HTuple paramName = new HTuple(), param = new HTuple();
                string[] paramlist = new string[10];
                switch (ROItype)
                {
                    case HDrawingObject.HDrawingObjectType.RECTANGLE2:
                        paramlist = new string[] { "row", "column", "phi", "length1", "length2" };
                        paramName = paramlist;
                        param = drawingObject.GetDrawingObjectParams(paramName);
                        HOperatorSet.GenRectangle2(out HROI, param.DArr[0], param.DArr[1], param.DArr[2], param.DArr[3], param.DArr[4]);
                        Result = param.DArr;
                        break;
    
                    case HDrawingObject.HDrawingObjectType.CIRCLE:
    
                        paramlist = new string[] { "row", "column", "radius" };
                        paramName = paramlist;
                        param = drawingObject.GetDrawingObjectParams(paramName);
                        HOperatorSet.GenCircle(out HROI, param.DArr[0], param.DArr[1], param.DArr[2]);
                        Result = param.DArr;
                        break;
                    case HDrawingObject.HDrawingObjectType.LINE:
                        paramlist = new string[] { "row1", "column1", "row2", "column2" };
                        paramName = paramlist;
                        param = drawingObject.GetDrawingObjectParams(paramName);
                        HOperatorSet.GenRegionLine(out HROI, param.DArr[0], param.DArr[1], param.DArr[2], param.DArr[3]);
                        Result = param.DArr;
                        break;
                    default:
                        Result = new double[] { 0 };
                        HROI = null;
                        break;
                }
            }
    
    • 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

    实际效果:
    直线ROI
    圆形ROI
    带角度的矩形ROI
    延申说明:
    1.Halcon自带的.netROI是通过调用HDrawingObject中的算子实现的,获取ROI同样也是,如何去得到延申的其他ROI。在Halcon的帮助文档中,搜索SetDrawingObjectParams并在.net格式中我们可以找到halcon所支持的全部ROI区域的参数,我们根据区域参数去获取即可。
    在这里插入图片描述
    注意事项:
    1.我们在编写的时候一定要主语获取的ROI的变量名称是否输入错误。我们在传入获取的参数名称需要与文档中的参数名称一一对应,并且大小写不能错误。
    在这里插入图片描述

  • 相关阅读:
    JS6day(DOM结点的查找、增加、删除。实例化时间)
    每日一练 | 网络工程师软考真题Day40
    安卓开发笔记——ListView加载性能优化ViewHolder
    fastjson知多少
    高精度加法(C语言实现)
    24.第12届蓝桥杯省赛真题题解
    32单片机基础:TIM输出比较
    【21天学习挑战赛】分块查找
    【深度学习】clip-interrogator clip docker 容器启动过程
    基于软约束的轨迹(路径)优化原理公式推导详解
  • 原文地址:https://blog.csdn.net/m0_51559565/article/details/134422052