主程序:

read_image (Image11, '11')*画仿射矩形
dev_set_color ('green')
draw_rectangle2 (3600, Row, Column, Phi, Length1, Length2)*生成仿射矩形xld
gen_rectangle2_contour_xld (Rectangle, Row, Column, Phi, Length1, Length2)
*找顶点工具(基于卡尺工具)
peak (Image11, Row, Column, Phi, Length1, Length2, 2, 0.41, 20, 'negative', 'first', EdgesY, EdgesX, ResultRow, ResultColumn)*显示图像
dev_display (Image11)
*显示仿射矩形
dev_display (Rectangle)
*显示所有边缘点
if(|EdgesY|>0)dev_set_color ('yellow')gen_cross_contour_xld (Cross, EdgesY, EdgesX, 0.5,  0)*显示顶点dev_set_color ('green')gen_cross_contour_xld (Cross,ResultRow, ResultColumn, 3, 0)*显示顶点坐标disp_message (3600, 'x:='+ResultColumn+'\r\ny:'+ResultRow, 'image', ResultRow, ResultColumn, 'blue', 'false')
endif

peak函数:

*初始化
ResultRow:=-9999
ResultCol:=-9999
EdgeColumns := []
EdgeRows := []*仿射矩形Length2所在直线作为rake工具的ROI
ROILineRow1:=0
ROILineCol1:=0
ROILineRow2:=0
ROILineCol2:=0*仿射矩形方向所直线的边做基准线
StdLineRow1:=0
StdLineCol1:=0
StdLineRow2:=0
StdLineCol2:=0
*判断仿射矩形是否有效
if(Length1<=0 or Length2<=0)return()
endif*计算仿射矩形角度的正弦值、余弦值
tuple_cos (Phi, Cos)
tuple_sin (Phi, Sin)*矩形第一个端点坐标
Col1 := 1.0*( Coloumn-Length1*Cos - Length2*Sin)
Row1 := 1.0*(Row-(-Length1*Sin + Length2*Cos))*矩形第二个端点坐标
Col2 := 1.0*(Coloumn+Length1*Cos - Length2*Sin)
Row2 := 1.0*(Row-(Length1*Sin + Length2*Cos))*矩形第三个端点坐标
Col3 := 1.0*(Coloumn+Length1*Cos + Length2*Sin)
Row3 := 1.0*(Row-(Length1*Sin - Length2*Cos))*矩形第四个端点坐标
Col4 := 1.0*(Coloumn-Length1*Cos + Length2*Sin)
Row4 := 1.0*(Row-(-Length1*Sin - Length2*Cos))*仿射矩形方向所直线的边做基准线
StdLineRow1:=Row2
StdLineCol1:=Col2
StdLineRow2:=Row3
StdLineCol2:=Col3*仿射矩形Length2所在直线作为rake工具的ROI
ROILineRow1 := (Row1+Row2)*0.5
ROILineCol1:= (Col1+Col2)*0.5
ROILineRow2 := (Row3+Row4)*0.5
ROILineCol2:= (Col3+Col4)*0.5
* gen_rectangle2_contour_xld (Rectangle, Row, Coloumn, Phi, Length1, Length2)
rake (Image, Regions1, 1.0*Length2*2, Length1*2, DetectWidth, Sigma, Threshold, Transition, Select, ROILineRow1, ROILineCol1, ROILineRow2, ROILineCol2, ResultRows, ResultColumns)*求所有边缘点到基准线的距离,保存最大距离及其对应的边缘点坐标,作为顶点
Max:=0
if(|ResultColumns|>0)EdgeRows := ResultRowsEdgeColumns := ResultColumnsfor i := 0 to |ResultColumns|-1 by 1distance_pl (ResultRows[i], ResultColumns[i], StdLineRow1, StdLineCol1, StdLineRow2, StdLineCol2, Distance1)if(Max<Distance1)Max:=Distance1ResultRow:=ResultRows[i]ResultColumn:=ResultColumns[i]endifendfor
endifreturn ( )

rake函数:

*获取图像尺寸
get_image_size(Image,Width,Height)
*产生一个空显示对象,用于显示
gen_empty_obj(Regions)
*初始化边缘坐标数组
ResultRow := []
ResultColumn := []
*产生直线xld
gen_contour_polygon_xld (RegionLines, [Row1,Row2], [Column1,Column2])
*存储到显示对象
concat_obj(Regions, RegionLines, Regions)
*计算直线与x轴的夹角,逆时针方向为正向。
angle_lx (Row1, Column1, Row2, Column2, ATan)*边缘检测方向垂直于检测直线:直线方向正向旋转90°为边缘检测方向
ATan:=ATan+rad(90)*根据检测直线按顺序产生测量区域矩形,并存储到显示对象
for i:=1 to Elements by 1
*     RowC := Row1+(((Row2-Row1)*i)/(Elements+1))
*     ColC := Column1+(Column2-Column1)*i/(Elements+1)
*     if (RowC>Height-1 or RowC<0 or ColC>Width-1 or ColC<0)
*     continue
*     endif*如果只有一个测量矩形,作为卡尺工具,宽度为检测直线的长度if(Elements=1)RowC := 1.0*(Row1+Row2)*0.5ColC := 1.0*(Column1+Column2)*0.5*判断是否超出图像,超出不检测边缘if (RowC>Height-1 or RowC<0 or ColC>Width-1 or ColC<0)continue endifdistance_pp(Row1, Column1, Row2, Column2, Distance)DetectWidth:=Distancegen_rectangle2_contour_xld(Rectangle, RowC, ColC,ATan, 1.0*DetectHeight/2,1.0*Distance/2)else*如果有多个测量矩形,产生该测量矩形xldRowC := 1.0*(Row1+(((Row2-Row1)*(i-1))/(Elements-1)))ColC := 1.0*(Column1+(Column2-Column1)*(i-1)/(Elements-1))*判断是否超出图像,超出不检测边缘if (RowC>Height-1 or RowC<0 or ColC>Width-1 or ColC<0)continue endifgen_rectangle2_contour_xld(Rectangle, RowC, ColC, ATan, 1.0*DetectHeight/2,1.0*DetectWidth/2)endif*把测量矩形xld存储到显示对象concat_obj (Regions, Rectangle, Regions)if(i=1)*在第一个测量矩形绘制一个箭头xld,用于只是边缘检测方向RowL2:=RowC+DetectHeight/2*sin(-ATan)RowL1:=RowC-DetectHeight/2*sin(-ATan)ColL2:=ColC+DetectHeight/2*cos(-ATan)ColL1:=ColC-DetectHeight/2*cos(-ATan)gen_arrow_contour_xld (Arrow1, RowL1, ColL1, RowL2, ColL2, 25, 25)*把xld存储到显示对象concat_obj (Regions, Arrow1, Regions)endif*产生测量对象句柄gen_measure_rectangle2(RowC, ColC,ATan, DetectHeight/2,DetectWidth/2,Width, Height, 'nearest_neighbor', MsrHandle_Measure)*设置极性if (Transition = 'negative')Transition := 'negative'else if (Transition = 'positive')Transition := 'positive'else  Transition := 'all'endifendif*设置边缘位置。最强点是从所有边缘中选择幅度绝对值最大点,需要设置为'all'if (Select = 'first')Select := 'first'else if (Select = 'last')Select := 'last'else  Select := 'all'endifendif*检测边缘measure_pos (Image, MsrHandle_Measure, Sigma, Threshold, Transition, Select, RowEdge, ColEdge, Amplitude, Distance)*清除测量对象句柄close_measure(MsrHandle_Measure)*临时变量初始化*tRow,tCol保存找到指定边缘的坐标tRow := 0tCol := 0*t保存边缘的幅度绝对值t:= 0*找到的边缘必须至少为1个tuple_length(RowEdge, Number)if(Number<1)continueendif*有多个边缘时,选择幅度绝对值最大的边缘for j:=0 to Number-1 by 1if(abs(Amplitude[j])>t)tRow := RowEdge[j]tCol := ColEdge[j]t := abs(Amplitude[j])endifendfor*把找到的边缘保存在输出数组if(t>0)ResultRow:=[ResultRow,tRow]ResultColumn:=[ResultColumn,tCol]endif
endforreturn ()

halcon找矩形顶点的一种方法相关推荐

  1. python演示验证图像叠加过程_Python叠加矩形框图层2种方法及效果代码实例

    本篇文章小编给大家分享一下Python叠加矩形框图层2种方法及效果代码实例,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 两种方式以及效果: 方式一,使用 ...

  2. python图层合并_图层最新:Python叠加矩形框图层2种方法及效果_爱安网 LoveAn.com

    关于"图层"的最新内容 聚合阅读 这篇文章主要介绍了Python叠加矩形框图层2种方法及效果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友 ...

  3. python图层_Python叠加矩形框图层2种方法及效果

    两种方式以及效果: 方式一,使用PIL.Image.blend方式: from PIL import Image, ImageDraw im = Image.open('d:/tmp/58.249.0 ...

  4. 桃花院长:如何找女朋友,有4种方法提升关系

    恋爱 "明明很努力,却交不到女朋友!""怎么做才可以交到女朋友?"你不是有这样的烦恼吗? 如果暂时没有女朋友的话,找女朋友的方法可能忘记了,也有可能不知道找女朋 ...

  5. 电脑文件夹剪切后如何找回来?分享三种方法

    很多用户喜欢使用剪切操作对电脑中的文件进行移动,但是在剪切过程中往往容易出现数据丢失的问题,比如最近有位用户从电脑中剪切文件夹发送到移动硬盘后却丢失了,那么对于电脑文件夹剪切后如何恢复呢?下面小编为大 ...

  6. [Halcon几何] 矩形顶点和对角连线角度计算

    描述:因为halcon中算子求的矩形角度有时候不是我所需要的角度,以算子smallest_rectangle2为例: 1)其获取的矩形角度范围- 90< angle <= 90,即无论通过 ...

  7. Linux--查找大文件的几种方法

    文章目录 前言 一.ls命令 二.find命令 1.find介绍 2.find查找 三.du命令 总结 前言 在生产问题的排查与服务器日常运维过程中,大文件的查找.排序是不可避免的一个操作.因为Lin ...

  8. 家谱整站源码php_PHP中找家谱树的几种方法

    $area = array( array('id'=>1,'name'=>'安徽','parent'=>0), array('id'=>2,'name'=>'海淀','p ...

  9. 寻找友情链接的几种方法

    做为一名站长大家都不可能不知道外链的重要性,所谓外链为王内容为皇,说的不无道理,随着百度等各大引擎算法的变更,外链对于站长们的要求也越来越高了,一般在论坛的一些回复和签名带上的链接所能够传递的权重几乎 ...

最新文章

  1. 这个对标苹果的微软实体店,开了十一年之后,现在要永久关闭了
  2. JS获取当前时间的前n天/后n天
  3. qsettings删除注册表_Qt QSettings读取注册表和ini | 学步园
  4. python--17个新手常见Python运行时错误
  5. linux 磁盘簇,linux系统exec簇工作原理
  6. 响应式系统的依赖收集追踪原理
  7. java的printwriter_Java PrintWriter错误
  8. 关于SVN代码提交粒度和频率的思考
  9. 老大,我想获取MySQL插入数据的自增ID,该怎么弄?
  10. ie6下的iframe,问题多多。
  11. 在vue中安装axios库
  12. C#监控设备(PLC)状态仿真模拟器
  13. 高等数学:微分、积分物理以及几何意义
  14. scrapy之spiders
  15. 想起某个人,想到某些事
  16. 机房收费系统(一)可行性研究报告
  17. mysql emoji 问号_mysql数据库怎么存入emoji表情,更改utf8mb4后为什么出现全是问号...
  18. epub文件格式揭秘
  19. python公约数公倍数_python 公倍数,公约数问题
  20. sql查询表中的索引

热门文章

  1. [操作系统实验lab4]实验报告
  2. Django Tips
  3. flex label 换行
  4. spring boot的多环境部署
  5. Unity --- MeshRenderer之网格合并
  6. vc/vs开发的应用程序添加dump崩溃日志转
  7. windows cmd编辑文本
  8. ThinkJS前端搭配vue时的Nginx配置
  9. PCB相关的基础知识
  10. 菜鸟的jQuery源码学习笔记(三)