• 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)

更多相关内容
• 利用鸟叔的外部函数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)
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);
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直线查找之拟合 直线的检测在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直线查找之卡尺 直线的检测在halcon中主要有两种方式：直线拟合和卡尺直线。这里分享卡尺方法，拟合的请移步：链接: 直线拟合 直线卡尺 首先把整体思路列出来： ①CreateMetrologyModel创建一个测量句柄...
• 这是学习的第一个Halcon视觉案例：霍夫变换在图像中曲线 由于之前了解到的视觉是Ni Vision，对于Halcon也只是了解，今天从第一个例子作为入门。附上代码： { *读取一张图片 read_image (Image, ‘C:/Users/58937/...
• halcon点击鼠标左键画一条直线,点击右键确认的封装好的函数，注意不知道如何使用halcon的不要去下载。
• 基于halcon12实现卡尺检测直线位置
• 1.基于halcon算法平台； 2.提供深度图源文件以及解压密码； 3.代码预览： */******************************************************************************** * @文档名称: 3D点云拟合直线。 * @作者: hugo *...
• 使用halcon直线拟合方法，将图像边缘清晰地显示出来。
• 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平台实现通过卡尺寻找边缘点，通过最小二乘法拟合直线
• 拟合直线 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是圆形的，所以我计划使用极坐标转换，将其展成直线，然后再测量线宽； ...
• 已知一条直线，然后把这条直线延长： 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实现在图像上拟合出直线

...