开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1826|回复: 20
收起左侧

[原创视频分享] 易语言开发视觉双相机定位分享

[复制链接]
结帖率:0% (0/2)
发表于 2024-6-7 22:44:19 | 显示全部楼层 |阅读模式   广西壮族自治区北海市
如果有热度就分享源代码
结合halcon19版本开发
  
如果真 (打开所有相机 = 10)
延时 (10)
hal.复制图像 (相机1图片, Image)
图像预处理1 ()
' hal.设置模型参数 (模板句柄, “timeout”, 100)
左边结果 = hal.单模型寻找不同形状 (Image, 模板句柄, 0, 360, 0.9, 1.1, 0.9, 1.1, 到小数 (编辑框12.内容), 1, 0.5, “least_squares”, 到整数 (编辑框11.内容), 0.9, 返回Y, 返回X, 返回角度, , , 返回分数)
' 左边结果 = hal.寻找形状匹配模型 (Image, 模板句柄, 0, 360, 到小数 (编辑框12.内容), 1, 0.5, “least_squares”, 到整数 (编辑框11.内容), 0.9, 返回Y, 返回X, 返回角度, 返回分数)
如果 (hal.弧度到角度 (返回角度).取元组小数 () > 90)
角度转换 = hal.弧度到角度 (返回角度).取元组小数 () - 360
角度转换 = hal.弧度到角度 (返回角度).取元组小数 ()

如果真 (左边结果 = 0)
' hal.求点和角到刚性仿射变换 (0, 0, 0, 返回Y, 返回X, 返回角度, 矩阵左)
' hal.仿射变换XLD (模板轮廓, 临时轮廓, 矩阵左)
hal.创建矩形 (临时矩形, 返回Y, 返回X, 返回角度, 400, 400)
编辑框4.内容 = 到文本 (角度转换)
编辑框5.内容 = 到文本 (返回X.取元组小数 ())
编辑框6.内容 = 到文本 (返回Y.取元组小数 ())
编辑框7.内容 = 到文本 (到数值 (编辑框5.内容)到数值 (编辑框500.内容))
编辑框8.内容 = 到文本 (到数值 (编辑框6.内容)到数值 (编辑框600.内容))
编辑框902.内容 = 到文本 (到数值 (编辑框4.内容)到数值 (编辑框900.内容))
编辑框602.内容 = 编辑框8.内容
编辑框502.内容 = 编辑框7.内容
如果真 (返回Y.取元组小数 () ≠ 0 返回X.取元组小数 () ≠ 0)
延时 (10)
线程ID1 = 线程_启动 (&找交点)
临时矩形.显示 (窗口ID)


i支持库列表   支持库注释   
ehalcon_ch(未知支持库)


  
' 找交点代码
如果真 (左边结果 ≠ 2)
' hal.清除窗口 (WindowHandle)
' hal.dev打开窗口 (0, 0, 图片框1.宽度, 图片框1.高度, “black”, WindowHandle)
hal.复制图像 (Image, Image2)
hal.取图像的尺寸 (Image2, Image高, Image宽)
hal.显示图像局部 (WindowHandle, 0, 0, Image宽, Image高)
hal.RGB1转灰度 (Image2, Image2)
' hal.读取图像 (Image2, “E:/视觉软件/halcon案例/halcon案例/08Halcon卡尺找边/2.png”)
hal.设置颜色 (WindowHandle, “red”)
hal.显示图像对象 (Image2, WindowHandle)
hal.取图像的尺寸 (Image2, Image高, Image宽)
hal.设置线宽 (WindowHandle, 2)
Row1 = hal.取整数 (到小数 (编辑框17.内容)到小数 (编辑框8.内容))
Column1 = hal.取整数 (到小数 (编辑框18.内容)到小数 (编辑框7.内容))
Row2 = hal.取整数 (到小数 (编辑框19.内容)到小数 (编辑框8.内容))
Column2 = hal.取整数 (到小数 (编辑框20.内容)到小数 (编辑框7.内容))
' hal.交互绘直线 (WindowHandle, Row1, Column1, Row2, Column2)
hal.赋值 (Line, hal.创建元组 (Row1, Column1, Row2, Column2))
hal.创建计量模型 (MetrologyHandle)
hal.设置计量模型图像大小 (MetrologyHandle, Image高, Image宽)
hal.添加计量对象通用 (MetrologyHandle, “line”, Line, 20, 5, 1, 15, hal.创建元组 (), hal.创建元组 (), Index)
hal.应用计量模型 (Image2, MetrologyHandle)
hal.取计量对象测量 (Contours, MetrologyHandle, “all”, “all”, Row, Column)
hal.创建十字XLD轮廓 (Cross, Row, Column, 1, 0.785398)
hal.取计量对象结果 (MetrologyHandle, “all”, “all”, “result_type”, “all_param”, Parameter)
hal.取计量对象模型轮廓 (Contour, MetrologyHandle, “all”, 1.5)
hal.清除计量模型 (MetrologyHandle)
' *拟合成直线
hal.创建多边形XLD轮廓 (Contour5, Row, Column)
hal.XLD轮廓拟合直线 (Contour5, “tukey”, -1, 0, 5, 2, RowBegin1, ColBegin1, RowEnd1, ColEnd1, Nr1, Nc1, Dist1)
' *这里主要是为了算角度
hal.线位置 (RowBegin1, ColBegin1, RowEnd1, ColEnd1, RowCenter, ColCenter, Length, Phi)
' *算角度
hal.赋值 (radian, Phi)
hal.赋值 (degree, hal. (hal. (radian, 180), 3.1415926))
编辑框2302.内容 = 到文本 (degree.取元组小数 ())
' *这个步骤才是构造无限长度直线
hal.XLD轮廓拟合直线 (Contour5, “tukey”, -1, 0, 5, 2, Row11, Column11, Row22, Column22, Nr1, Nc1, Dist1)
' hal.显示图像对象 (Contour5, 窗口ID)
' *特殊情况水平线
判断 (hal.等于 (hal. (Row22, Row11), 0))
hal.赋值 (k, 0)
hal.创建多边形XLD轮廓 (Contour, hal.创建元组 (Row22, Row22), hal.创建元组 (0, Image高))
k = hal.取整数 ( (Column22.取元组小数 () - Column11.取元组小数 ()) ÷ (Row22.取元组小数 () - Row11.取元组小数 ()))
hal.赋值 (b, hal. (Column22, hal. (k, Row22)))
hal.赋值 (Row1, 0)
hal.赋值 (Row2, hal. (Image宽, 1))
hal.赋值 (col1, hal. (hal. (k, Row1), b))
hal.赋值 (col2, hal. (hal. (k, Row2), b))
hal.创建多边形XLD轮廓 (Contour, hal.创建元组 (Row1, Row2), hal.创建元组 (col1, col2))

hal.显示图像对象 (Contour, 窗口ID)
' hal.交互绘直线 (WindowHandle, Row111, Column111, Row222, Column222)
Row111 = hal.取整数 (到小数 (编辑框21.内容)到小数 (编辑框8.内容))
Column111 = hal.取整数 (到小数 (编辑框22.内容)到小数 (编辑框7.内容))
Row222 = hal.取整数 (到小数 (编辑框23.内容)到小数 (编辑框8.内容))
Column222 = hal.取整数 (到小数 (编辑框24.内容)到小数 (编辑框7.内容))
' Row111 = hal.取整数 (编辑框21.内容)
' Column111 = hal.取整数 (编辑框22.内容)
' Row222 = hal.取整数 (编辑框23.内容)
' Column222 = hal.取整数 (编辑框24.内容)
hal.赋值 (Line, hal.创建元组 (Row111, Column111, Row222, Column222))
hal.创建计量模型 (MetrologyHandle1)
hal.设置计量模型图像大小 (MetrologyHandle1, Image高, Image宽)
hal.添加计量对象通用 (MetrologyHandle1, “line”, Line, 20, 5, 1, 15, hal.创建元组 (), hal.创建元组 (), Index)
hal.设置颜色 (WindowHandle, “red”)
hal.应用计量模型 (Image2, MetrologyHandle1)
' *生成的轮廓
hal.取计量对象测量 (Contours1, MetrologyHandle1, “all”, “all”, Row3, Column3)
' *生成叉叉的记号
hal.创建十字XLD轮廓 (Cross1, Row3, Column3, 1, 0.785398)
hal.取计量对象结果 (MetrologyHandle1, “all”, “all”, “result_type”, “all_param”, Parameter)
' *生成中间的那条横线
hal.取计量对象模型轮廓 (Contour1, MetrologyHandle1, “all”, 1.5)
hal.清除计量模型 (MetrologyHandle1)
' *拟合直线
hal.创建多边形XLD轮廓 (Contour2, Row3, Column3)
hal.XLD轮廓拟合直线 (Contour2, “tukey”, -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
' hal.显示图像对象 (Contour2, 窗口ID)
' *算角度
hal.线位置 (RowBegin, ColBegin, RowEnd, ColEnd, RowCenter1, ColCenter1, Length1, Phi1)
' *算角度
hal.赋值 (radian1, Phi1)
hal.赋值 (degree1, hal. (hal. (radian1, 180), 3.1415926))
编辑框2303.内容 = 到文本 (degree1.取元组小数 ())
' 编辑框4.内容 = 到文本 (degree1.取元组小数 ())
' 编辑框9.内容 = 到文本 (到数值 (编辑框4.内容) - 到数值 (编辑框900.内容))
hal.XLD轮廓拟合直线 (Contour2, “tukey”, -1, 0, 5, 2, Row11, Column11, Row22, Column22, Nr1, Nc1, Dist1)
' hal.显示图像对象 (Contour2, 窗口ID)
' *特殊情况水平线
判断 (hal.等于 (hal. (Row22, Row11), 0))
hal.赋值 (k, 0)
hal.创建多边形XLD轮廓 (Contour1, hal.创建元组 (Row22, Row22), hal.创建元组 (0, Image高))
k = hal.取整数 ( (Column22.取元组小数 () - Column11.取元组小数 ()) ÷ (Row22.取元组小数 () - Row11.取元组小数 ()))
hal.赋值 (b, hal. (Column22, hal. (k, Row22)))
hal.赋值 (Row1, 0)
hal.赋值 (Row2, hal. (Image宽, 1))
hal.赋值 (col1, hal. (hal. (k, Row1), b))
hal.赋值 (col2, hal. (hal. (k, Row2), b))
hal.创建多边形XLD轮廓 (Contour1, hal.创建元组 (Row1, Row2), hal.创建元组 (col1, col2))

hal.显示图像对象 (Contour1, 窗口ID)
hal.求线段交点 (RowBegin1, ColBegin1, RowEnd1, ColEnd1, RowBegin, ColBegin, RowEnd, ColEnd, Row6, Column4, IsOverlapping)
hal.创建十字XLD轮廓 (Cross2, Row6, Column4, 200, 0.785398)
找到交点 = hal.显示图像对象 (Cross2, 窗口ID)
编辑框42.内容 = 到文本 (找到交点)
取交点原点Y = 到数值 (Row6.取元组小数 ())
取交点原点X = 到数值 (Column4.取元组小数 ())
编辑框2300.内容 = 到文本 (到数值 (Row6.取元组小数 ()) - 到数值 (编辑框800.内容))
编辑框2301.内容 = 到文本 (到数值 (Column4.取元组小数 ()) - 到数值 (编辑框801.内容))
编辑框2506.内容 = 编辑框2300.内容
编辑框2507.内容 = 编辑框2301.内容
hal.保存窗口到文件 (窗口ID, “png”, 取运行目录 ()“\测试完成图片\”到文本 (取现行时间 ()) + “_” + 编辑框10.内容 + “_左”)
如果 (编辑框2300.内容 ≠ “” 编辑框2301.内容 ≠ “”)
如果真 (按钮25.标题 = “标定开启”)
延时 (10)
线程_启动 (&标定A)

如果真 (到整数 (编辑框2302.内容) = 0 到整数 (编辑框2303.内容) = 0)
标签6.文本颜色 = #红色
标签6.标题 = “NG”
编辑框3.加入文本 (到文本 (取现行时间 ()) + “:左交点未生成,左计算NG”#换行符 )
编辑框20006.内容 = “2”


i支持库列表   支持库注释   
ehalcon_ch(未知支持库)



结帖率:0% (0/2)
 楼主| 发表于 2024-8-7 15:43:16 | 显示全部楼层   广西壮族自治区南宁市
qq977352880 发表于 2024-8-6 12:30
很庆幸看到了这个,非常感谢!

能用到就行
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
 楼主| 发表于 2024-8-7 15:35:30 | 显示全部楼层   广西壮族自治区南宁市
寻找匹配模板---------------------------------
  
子程序名返回值类型公开备 注
左图像模板处理  
变量名类 型静态数组备 注
矩阵左视觉元组 
临时轮廓视觉对象 
临时矩形视觉对象 
角度转换双精度小数型 
ScaleR双精度小数型 
ScaleC双精度小数型 
如果真 (打开所有相机 = 10)
hal.复制图像 (相机1图片, Image)
图像预处理1 ()
' hal.设置模型参数 (模板句柄, “timeout”, 100)
左边结果 = hal.单模型寻找不同形状 (Image, 模板句柄, hal.角度到弧度 (0), hal.角度到弧度 (90), 1, 1, 1, 1, 到小数 (编辑框12.内容), 1, 0.5, “least_squares”, 到整数 (编辑框11.内容), 0.9, 返回Y, 返回X, 返回角度, , , 返回分数)
' 左边结果 = hal.寻找形状匹配模型 (Image, 模板句柄, 0, 360, 到小数 (编辑框12.内容), 1, 0.5, “least_squares”, 到整数 (编辑框11.内容), 0.9, 返回Y, 返回X, 返回角度, 返回分数)
' 左边结果 = hal.查找平面非校准可变形模型 (Image, 模板句柄, hal.角度到弧度 (0), hal.角度到弧度 (360), 1, 1, 1, 1, 到小数 (编辑框12.内容), 1, 1, 0, 0.9, , , 矩阵左, 返回分数)
如果 (hal.弧度到角度 (返回角度).取元组小数 () > 90)
角度转换 = hal.弧度到角度 (返回角度).取元组小数 () - 360
角度转换 = hal.弧度到角度 (返回角度).取元组小数 ()

如果真 (左边结果 = 0)
' hal.求点和角到刚性仿射变换 (0, 0, 0, 返回Y, 返回X, 返回角度, 矩阵左)
' hal.仿射变换XLD (模板轮廓, 临时轮廓, 矩阵左)
hal.创建矩形 (临时矩形, 返回Y, 返回X, 返回角度, 400, 400)
编辑框4.内容 = 到文本 (角度转换)
编辑框5.内容 = 到文本 (返回X.取元组小数 ())
编辑框6.内容 = 到文本 (返回Y.取元组小数 ())
编辑框7.内容 = 到文本 (到数值 (编辑框5.内容)到数值 (编辑框500.内容))
编辑框8.内容 = 到文本 (到数值 (编辑框6.内容)到数值 (编辑框600.内容))
编辑框902.内容 = 到文本 (到数值 (编辑框4.内容)到数值 (编辑框900.内容))
编辑框602.内容 = 编辑框8.内容
编辑框502.内容 = 编辑框7.内容
延时 (10)
如果真 (返回Y.取元组小数 () ≠ 0 返回X.取元组小数 () ≠ 0)
线程ID1 = 线程_启动 (&找交点)
临时矩形.显示 (窗口ID)
' Image.显示 (窗口ID)
' 左边结果 = 模板轮廓.显示 (窗口ID)

按钮4.标题 = “找模板关”
如果 (返回Y.取元组小数 () = 0 返回X.取元组小数 () = 0)
标签6.文本颜色 = #红色
标签6.标题 = “NG”
编辑框20006.内容 = “2”
_选择框1_被单击 ()





i支持库列表   支持库注释   
ehalcon_ch(未知支持库)

回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 16 天

发表于 2024-8-6 12:30:19 | 显示全部楼层   香港特别行政区*
很庆幸看到了这个,非常感谢!
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 16 天

发表于 2024-8-6 02:30:05 | 显示全部楼层   香港特别行政区*
收藏了,以后肯定用得到。
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
 楼主| 发表于 2024-6-21 20:01:26 | 显示全部楼层   广西壮族自治区北海市

图像处理比OPENCV快
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 9 天

发表于 2024-6-21 14:44:49 | 显示全部楼层   天津市天津市
halcon很强大
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
 楼主| 发表于 2024-6-15 09:53:32 | 显示全部楼层   广西壮族自治区北海市
cs潇潇 发表于 2024-6-14 21:36
不是,我指的是广告加工厂里的彩色喷墨打印机喷头校准

不懂你这个 校准是啥,能用图片示范一下?
回复 支持 反对

使用道具 举报

结帖率:70% (35/50)

签到天数: 18 天

发表于 2024-6-14 21:36:43 | 显示全部楼层   美国
高庞 发表于 2024-6-14 21:15
肯定可以的,就是为了校正用的,你说的是,打印机打印条码出来,然后拍照定位,在贴合吧? ...

不是,我指的是广告加工厂里的彩色喷墨打印机喷头校准
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
 楼主| 发表于 2024-6-14 21:15:22 | 显示全部楼层   广西壮族自治区北海市
cs潇潇 发表于 2024-6-8 04:28
看不懂,这能校验打印机吗,感觉用途有限

肯定可以的,就是为了校正用的,你说的是,打印机打印条码出来,然后拍照定位,在贴合吧?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表