精华内容
下载资源
问答
  • 2022-06-21 16:01:53

    Halcon 查找直线

    rake (Image20220620113218474, Regions, 15, 40, 10, 1, 20, 'all', 'max',391 ,561 ,231 ,603 , ResultRow, ResultColumn)
    
    pts_to_best_line (Line,ResultRow, ResultColumn, 2, Row1, Column1, Row2, Column2)
    
    
    gen_region_line (RegionLines,Row1, Column1, Row2, Column2)
    
    更多相关内容
  • Halcon直线

    2018-07-04 11:01:30
    利用鸟叔的外部函数rake.spoke,抓直线,可简单自定义抓线位置,计算交点
  • Halcon代码,用于检测选择区域中的直线,把直线标注出来。
  • 分享自己撸的一个halcon检测直线的算法,该方法可控性强,稳定,准确
  • 本人自己写的基于halcon直线搜索工具,C++下的代码。
  • Halcon直线

    千次阅读 2019-11-14 14:43:10
    原图,类似这样的图就行 代码 read_image (Image, 'E:/gongsi/Project/BatterySun/test8.png') rgb1_to_gray (Image, GrayImage) threshold_sub_pix (GrayImage, Regions,200) select_shape_xld (Regions, ...

    原图,类似这样的图就行在这里插入图片描述

    在这里插入图片描述

    代码

    read_image (Image, 'E:/gongsi/Project/BatterySun/test8.png')
    rgb1_to_gray (Image, GrayImage)
    threshold_sub_pix (GrayImage, Regions,200)
    select_shape_xld (Regions, SelectedXLD, 'contlength', 'and', 1, 99999)
    count_obj (SelectedXLD, Number)
    segment_contours_xld (SelectedXLD, ContoursSplit, 'lines', 5, 4, 2)
    count_obj (ContoursSplit, Number1)
    union_collinear_contours_xld (ContoursSplit, UnionContours1, 20, 1, 2, 0.1, 'attr_keep')
    select_contours_xld (UnionContours1, SelectedContours1, 'contour_length', 50, 9999, -0.5, 0.5)
    area_center_points_xld(SelectedContours1, Area, Row, Column)//获取线的中心与长度
    fit_line_contour_xld (SelectedContours1, 'tukey', -1, 0, 5, 2, RowBegin1, ColBegin1, RowEnd1, ColEnd1, Nr1, Nc1, Dist1)//百度该算子
    
    for i := 0 to Number1-1 by 1 //判断横竖
      if(Nr1[i]>0.5)
          Area[i]:=-1
      else 
          j:=i
     endif   
    endfor
    

    效果
    在这里插入图片描述

    展开全文
  • HALCON源码画两个直线两条线的交点,
  • HALCON 查找直线

    千次阅读 2018-02-07 22:17:27
    void LineFind(HObject Image, HTuple HomMat2D, HTuple* LineParameter) { HTuple MetrologyHandle, MetrologyLineIndices; HTuple RowTransBegin, ColTransBegin, RowTransEnd, ColTransEnd;...
    void LineFind(HObject Image, HTuple HomMat2D, HTuple* LineParameter)
    {
    	HTuple MetrologyHandle, MetrologyLineIndices;
    	HTuple RowTransBegin, ColTransBegin, RowTransEnd, ColTransEnd;
    
    	// find
    	HomMat2dInvert(HomMat2D, &HomMat2D);
    	AffineTransPixel(HomMat2D, HTuple(m_lineFind.sRegion.nRowBegin), 
    				   HTuple(m_lineFind.sRegion.nColumnBegin), 
    				   &RowTransBegin, &ColTransBegin);
    	AffineTransPixel(HomMat2D, HTuple(m_lineFind.sRegion.nRowEnd), 
    		                   HTuple(m_lineFind.sRegion.nColumnEnd),
    				   &RowTransEnd, &ColTransEnd);
    
    	CreateMetrologyModel(&MetrologyHandle);
    	AddMetrologyObjectLineMeasure(MetrologyHandle, RowTransBegin, ColTransBegin,
    		                         RowTransEnd, ColTransEnd, m_lineFind.nTolerance, 
    					5, 1, m_lineFind.nThreshold, 
    		                         HTuple(), HTuple(), &MetrologyLineIndices);
    	SetMetrologyObjectParam(MetrologyHandle, MetrologyLineIndices, 
    		                   "num_instances", m_lineFind.nLineNum);
    	SetMetrologyObjectParam(MetrologyHandle, MetrologyLineIndices,
    		                    "measure_transition", "uniform");
    	SetMetrologyObjectParam(MetrologyHandle, MetrologyLineIndices, 
    		                    "measure_interpolation", "bicubic");
    	SetMetrologyObjectParam(MetrologyHandle, MetrologyLineIndices, 
    		                   "min_score", m_lineFind.nStraightness);
    	ApplyMetrologyModel(Image, MetrologyHandle);
    
    	GetMetrologyObjectResult(MetrologyHandle, MetrologyLineIndices, "all",
    		"result_type", "all_param", LineParameter);
    	ClearMetrologyModel(MetrologyHandle);
    }

    展开全文
  • 基于halcon直线查找之拟合

    千次阅读 2020-03-29 17:56:03
    基于halcon直线查找之拟合 直线的检测在halcon中主要有两种方式:直线拟合和卡尺直线。 普通直线拟合 halcon有方便快捷的fit_line_contour_xld算子。用法简单粗暴: ①draw_line画一条直线; ②gen_region_line...

    我这人比较懒得罗里吧嗦,基本都是直接说两点:why?how?

    基于halcon的直线查找之拟合

    直线的检测在halcon中主要有两种方式:直线拟合和卡尺直线。这里分享直线拟合,直线卡尺请移步:直线卡尺

    普通直线拟合

    halcon有方便快捷的fit_line_contour_xld算子。用法简单粗暴:

    draw_line画一条直线;
    gen_region_line生成直线区域;
    gen_contour_region_xld直线区域转xld轮廓;
    ④然后你可以直接fit_line_contour_xld拟合直线,也可以先get_contour_xld对轮廓的点坐标自己做一些筛选。

    但是如果需求不允许使用阻塞线程的、交互性的draw系列算子,或者无法获取一系列的点坐标呢?

    这里介绍一种只用两点坐标,甚至一点坐标 + 斜率,就能拟合直线的方法:

    CTRL + CV时刻

    直接上代码: 直接copy拿去用吧
    下面是写好的 拟合代码,这里的参数类型可以改成其他同类的类型,或者其他容器类。

    // 拟合代码,外部调用,我这里是传入首尾两点,起始可以传入任意位置的点来拟合,
    // 传入不是首尾点的话,计算方式要做一点修改
    bool FitLine(HTuple start, HTuple end, HTuple& phi)
    {
        //公式AX + BY + C = 0
        double a = 0;
        double b = 0;
        double c = 0;
        a = end[0].D() - start[0].D();
        b = start[1].D() - end[1].D();
        c = end[1].D() * start[0].D() - start[1].D() * end[0].D();
        HTuple len = HTuple();
        DistancePp(start[0], start[1], end[0], end[1], &len);
        AngleLx(start[0], start[1], end[0], end[1], &phi);
        //x_len是x轴的直角边长度,看需求是用斜边len长,还是x_len长度,或者再求个y轴长度都行
        double x_len = cos(phi[0].D() * 180 / PI) * len[0].D();
        QList<double> rows, cols;
        rows.append(start[0].D());
        cols.append(start[1].D());
        double newX = 0;
        double newY = 0;
        //len[0].D() / 10.0,除10是点与点的像素间隔,你可以用5、20、17任意数字都行。
        //当然,别用负值,比较间隔没有负值  - -0
        for(int i = 2; i < static_cast<int>(len[0].D() / 10.0) - 2; i++)
        {
            newX = start[1].D() + (i * 10);
            newY = (-1 * a * newX - c) / b;
            rows.append(newY);
            cols.append(newX);
        }
    
        rows.append(end[0].D());
        cols.append(end[1].D());
        QPoint startPoint, endPoint;
    
        if(FitLineByTwoPoint(rows, cols, startPoint, endPoint))
        {
            AngleLx(startPoint.x(), startPoint.y(), endPoint.x(), endPoint.y(), &phi);
            //这里可以在形参那里多传入一个HObject引用来获取直线结果对象
            //HObject line;
            //GenRegionLine(&line, startPoint.x(), startPoint.y(), endPoint.x(), endPoint.y());
            //DispObj(line, winID);
            return true;
        }
    
        return false;
    }
    
    // 拟合代码,被FitLine使用:参数类型是QList,是Qt的,可以改成HTuple或者标准类型。
    bool FitLineByTwoPoint(QList<double> rows, QList<double> cols, QPoint& startPoint, QPoint& endPoint)
    {
        try
        {
            HTuple dst_rows = HTuple();
            HTuple dst_cols = HTuple();
    
            for (int i = 0; i < rows.length(); i++)
            {
                dst_rows.Append(rows[i]);
                dst_cols.Append(cols[i]);
            }
    
            //SortPairs(rows, cols, &dst_rows, &dst_cols);
            HTuple rowBegin = HTuple(), colBegin = HTuple(), rowEnd = HTuple(), colEnd = HTuple(), nr = HTuple(), nc = HTuple(), dist = HTuple();
            HXLDCont lineXLD = HXLDCont(dst_rows, dst_cols);
            FitLineContourXld(lineXLD, "tukey", -1, 0, 5, 2, &rowBegin, &colBegin, &rowEnd, &colEnd, &nr, &nc, &dist); //tukey剔除算法为halcon推荐算法
            startPoint = QPoint(colBegin.D(), rowBegin.D());
            endPoint = QPoint(colEnd.D(), rowEnd.D());
            return true;
        }
        catch (HException* ex)
        {
        }
        return false;
    }

    注意

    我懒得写

    展开全文
  • 基于halcon直线查找之卡尺

    千次阅读 2020-03-29 18:14:05
    基于halcon直线查找之卡尺 直线的检测在halcon中主要有两种方式:直线拟合和卡尺直线。这里分享卡尺方法,拟合的请移步:链接: 直线拟合 直线卡尺 首先把整体思路列出来: ①CreateMetrologyModel创建一个测量句柄...
  • 这是学习的第一个Halcon视觉案例:霍夫变换在图像中曲线 由于之前了解到的视觉是Ni Vision,对于Halcon也只是了解,今天从第一个例子作为入门。附上代码: { *读取一张图片 read_image (Image, ‘C:/Users/58937/...
  • halcon点击鼠标左键画一条直线,点击右键确认的封装好的函数,注意不知道如何使用halcon的不要去下载。
  • 基于halcon12实现卡尺检测直线位置
  • 1.基于halcon算法平台; 2.提供深度图源文件以及解压密码; 3.代码预览: */******************************************************************************** * @文档名称: 3D点云拟合直线。 * @作者: hugo *...
  • halcon直线拟合边缘

    2015-07-05 10:30:32
    使用halcon直线拟合方法,将图像边缘清晰地显示出来。
  • Halcon】提取直线及其宽度

    千次阅读 2018-12-30 22:45:50
    1.思路 先利用calculate_lines_gauss_parameters()根据...根据上面得到的3个参数,利用lines_gauss()获取直线和线宽 按照一定规则,对线进行排序并显示出来 2. 代码 * 关闭窗口更新 dev_update_off () * 读取图像...
  • 基于halcon自定义圆形和直线的抓边代码(可以自己设定抓边矩阵的数量,宽)
  • hough_lines (SelectedRegions, 4, 50, 5, 5, Angle, Dist) 设置输出对象的颜色 dev_set_color (‘blue’) 将直线转换为区域 gen_region_hline (Regions, Angle, Dist) 根据方向特征来过滤想要的直线 select_shape ...
  • *求交叉区域intersection (Region1, Region2, RegionIntersection) *求circle与轮廓的交叉点 ...*求直线与轮廓的交叉点(计算的时候会自动延长直线,得到直线的延长线与轮廓的交叉点) intersection_line_co
  • 基于Halcon平台实现通过卡尺寻找边缘点,通过最小二乘法拟合直线
  • Halcon自定义直线卡尺rake

    千次阅读 2021-06-09 15:37:30
    拟合直线 rake工具 1. 为什么要开发rake工具 2. rake工具的封装三个函数 2.1 创建ROI的函数:draw_rake 2.2 边缘测量的函数:rake 2.3 拟合直线的函数:pts_to_best_line 3. rake工具使用示例 4. 代码下载
  • halcon霍夫直线检测

    千次阅读 2019-07-15 15:44:05
    *将直线转化为区域,我的理解是会检测出很多条直线,将它们看成一个整体,方便下面在整体中选择 gen_region_hline(Regions, Angle, Dist) *根据方向选择直线,后面两个参数是挑选直线的弧度范围 select_shape...
  • 简单点说就是通过模型线。 ①绘画了四条线绑定了基准模型 ②图像向右旋转90°后,模型角度变成了-90°, 而四根线的位置绑定模型之后就会跟着模型变化。 ③图像向左旋转90°后,模型角度变成了90°, 而四根线的...
  • halcon代码下载 1. 场景说明 如下图,有5个焊印,现在我想测量焊印的宽度,检查有没有断焊,漏焊,焊印宽度很窄的情况。 2. 简单分析 焊印1是圆形的,所以我计划使用极坐标转换,将其展成直线,然后再测量线宽; ...
  • halcon直线延长

    2022-05-31 15:02:57
    已知一条直线,然后把这条直线延长: gen_image_const (Image, 'byte', 512, 512) draw_line (200000, Row1, Column1, Row2, Column2) *直线方程y=k*x+b get_image_size (Image, Width, Height) *特殊情况水平线 if ...
  • read_image (hImage, 'E:/vs2012/halcon卡尺例程/白光碗光效果4.bmp') get_image_pointer1(hImage, Pointer, Type, Width, Height) *功能:获取一个通道的指针,得到HTuple Pointer, Type, CurWidth, CurHeight dev_...
  • 思路:通过从左到右的边缘点的方法找到边缘点集,再将这些点集拟合成一条直线。 分析:边缘点集容易确定,但是蓝色箭头的异常点会包含在点集中,这时用OpenCV中的fitLine拟合直线会拟合成类似红色那条,可是我们想...
  • Halcon拟合直线

    千次阅读 2018-08-09 17:38:41
    *****************通过点进一步定位取点并拟合直线********************** read_image (Image, 'C:/Users/研发/Pictures/Saved Pictures/1.png') get_image_size (Image, Width, Height) dev_set_draw ('margin') *...
  • *计量对象被添加到计量模型中 * add_metrology_object_circle_measure (MetrologyHandle, Row, Column, Radius, 20, 5, 1, 30, [], [], Index1) * add_metrology_object_ellipse_measure (MetrologyHandle, Row, ...
  • 在Windows下使用QT+Halcon实现在图像上拟合出直线

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,163
精华内容 465
关键字:

halcon找直线