halcon找矩形顶点的一种方法

主程序:

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*找到的边缘必须至少为1tuple_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 ()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H264关于RTP协议的实现

完整的C&#xff0f;S架构的基于RTP&#xff0f;RTCP的H&#xff0e;264视频传输方案。此方案中&#xff0c;在服务器端和客户端分别进行了功能模块设计。服务器端&#xff1a;RTP封装模块主要是对H&#xff0e;264码流进行打包封装&#xff1b;RTCP分析模块负责产牛和发送RTCP…

华为数通HCIE面试题目解密系列之RSTP边缘端口

以下是华为数通面试考试的一道真题&#xff0c;原题如下&#xff1b; 请举例说明 stp 的 edge port 的作用,用在什么场景&#xff0c;并且使用 edge port 会碰到什么问题&#xff0c;怎么解决和防止&#xff1f; 提到边缘端口&#xff0c;我们是在NP课程的交换部分第一次接触&a…

Django:视图和URL配置

一、视图1.在mysite文件夹下。创建views.py文件&#xff08;文件名称没有特别的要求&#xff09;&#xff1b;from django.http import HttpResponsedef hello(request):return HttpResponse("Hello world")2.改动mysite文件夹下的urls.py文件&#xff1b;from djang…

u-boot 详细介绍 .

Bootloader 对于计算机系统来说&#xff0c;从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序&#xff0c;这个引导程序就叫作Bootloader。6.1.1 Bootloader介绍Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序&#xff0c;我们…

apicloud使用指南

ApiCloud ApiCloud平台介绍 ApiCloud首页在线教程文档ApiCloud是一个国内的Hybird APP平台&#xff0c;提供Hybird APP一站式开发服务。可以将使用HTML、CSS和JS制作的应用直接编译为能在安卓和IOS平台上运行的APP。另外&#xff0c;其所提供的代码托管和在线编译服务&#xff…

halcon对光源打光不均匀进行平场矫正

* Image Acquisition 01: Code generated by Image Acquisition 01 *******预处理&#xff0c;生成RGB三通道的平场矫正的图像 *1.绘制检测ROI *2.对检测的ROI进行平场矫正 *3.平场矫正方法采用均值对减方法 read_image (ImageWhite, C:/Users/Administrator/Desktop/平场矫正/…

金属圆柱求取倾斜角度

方法1&#xff1a; count_seconds (Seconds1)read_image (Image, 9_7750_f3d301de6764d94.jpg)get_image_size (Image, Width, Height)dev_open_window (0, 0, Width, Height, black, WindowHandle)dev_display (Image)rgb1_to_gray (Image, GrayImage)dev_display (GrayImage)…

PhpStudy 升级 MySQL 版本到5.7

1&#xff1a;备份当前数据库数据、 最好是导成 SQL 文件2&#xff1a;备份 PhpStudy 下的 MySQL 文件夹、以防升级失败、还可以使用旧版本的数据库3&#xff1a;下载MySQL5.7、解压、然后放在 PhpStudy 下的 MySQL 文件夹下地址&#xff1a;https://dev.mysql.com/downloads/f…

使用直线标定板进行相机畸变校正,并且进行9点标定(halcon)

直线标定板图片&#xff1a; 机械吸头位置图片&#xff1a; 处理代码 read_image (Image, 直线标定板图片/Left201118140641772.bmp) get_image_size (Image, Width, Height) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display…

【Java MyBatis Generator】使用generator自动生成Dao,Mapping和实体文件

具体请参照&#xff1a; http://blog.csdn.net/fengshizty/article/details/43086833 按照上面博客地址&#xff0c;下载Generator的依赖包&#xff1a; 如下是我的配置文件&#xff1a; 1 <?xml version"1.0" encoding"UTF-8"?>2 <!DOCTYPE ge…

h5移动端设备像素比dpr介绍

首先介绍一下概念 devicePixelRatio其实指的是window.devicePixelRatio window.devicePixelRatio是设备上物理像素和设备独立像素(device-independent pixels (dips))的比例。 公式表示就是&#xff1a;window.devicePixelRatio 物理像素 / dips 好了&#xff0c;到了这里有出…

halcon直线标定板对相机标定的效果评估(对比矫正前后、对比标定板矫正效果)

原图 程序源码 * gen_caltab (7, 7, 0.0025, 1/2.5, GB025标定板.descr, GB025标定板.ps) * Calibration 01: Code generated by Calibration 01 * CameraParameters : [0.048105,-44.0585,8.31518e-006,8.3e-006,641.37,588.269,1280,1024] * CameraPose : [-0.000849522,-0.…

【QQ输入法】QQ输入法-剪切板 释放内存

发现一个神奇的情况&#xff1a; 清除和关闭的操作&#xff1a; 1. 2.右键 3.点击 4.清空 5.最后需要关闭 QQ输入法的进程

真的要做一辈子的程序员吗?来自10年程序员的心声

经常听一些同学说&#xff1a;不知道下一份工作该去哪类公司做些什么&#xff0c;我的职场人际一团糟老板不重视我&#xff0c;我现在成长的非常慢所以又想跳槽了&#xff0c;我看不到公司的发展前景好迷茫&#xff0c;其实这一切的困惑都来源于没有做好职业规划或者你根本就没…

网络编程之 TCP / UDP 及其流程比较

TCP与UDP的区别 1、基于连接与无连接 2、对系统资源的要求&#xff08;TCP较多&#xff0c;UDP少&#xff09;3、UDP程序结构较简单 流模式与数据报模式 4、TCP保证数据正确性&#xff0c;UDP可能丢包 5、TCP保证数据顺序&#xff0c;UDP不保证具体编程时的区别 1、socket()的参…

Tomcat在Linux上的安装与配置

Tomcat在Linux上的安装与配置 1、 jdk下载地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html tomcat下载地址:http://tomcat.apache.org/download-70.cg 2、jdk安装与配置.&#xff08;rpm包&#xff09; (1)jdk安装…

使用halcon选择点拟合成直线求直线角度

原图 源码 read_image (Image, 0.bmp) dev_clear_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image)binary_threshold (Image, Region, max_separability, dark, UsedThreshold) connection (Region, ConnectedRegions) select_s…

Linux网络/firewalld和netfilter/netfilter/iptables语法

为什么80%的码农都做不了架构师&#xff1f;>>> linux网络相关 查看网卡网络信息 ifconfig 命令查看网卡网络信息&#xff0c;比如ip、网关、子网掩码等&#xff0c;但是安装centos7的版本或者某些未知原因&#xff0c;此命令提示找不到&#xff0c;我们可以使用Yu…

Chrome开发者工具详解(4)-Profiles面板

Chrome开发者工具详解(4)-Profiles面板 如果上篇中的Timeline面板所提供的信息不能满足你的要求&#xff0c;你可以使用Profiles面板&#xff0c;利用这个面板你可以追踪网页程序的内存泄漏问题&#xff0c;进一步提升程序的JavaScript执行性能。 概述 当前使用的Chrome最新版为…

halcon通过点拟合圆形,鼠标选点

原图 源码 read_image (Image, 0.bmp) dev_clear_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display (Image)binary_threshold (Image, Region, max_separability, dark, UsedThreshold) connection (Region, ConnectedRegions) select_s…