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.pswp.cn/news/254138.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254138.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254138.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

老男孩linux運維50期

一、自我介紹&#xff1a;我是來自老男孩Linux運維脫產50期的楊國峰&#xff0c;我以前是學軟件編碼的&#xff0c;但在大學里基本沒怎么學&#xff0c;每一門課都一知半解的&#xff0c;甚至有些連軟件都不會裝&#xff0c;在校期間&#xff0c;我對JAVA、網頁設計等都不感興趣…

博客收藏

http://www.dreamfairy.cn/blog/category/unity3d/轉載于:https://www.cnblogs.com/wantnon/p/5989843.html

移動開發平臺性能比較

jquerymobile是一個mobile平臺下的js框架,跟phonegap沒有一毛錢關系.phonegap實際上在國內占有率不高的,非常多人為了體驗喜歡做傳統的原生手機應用. 而Webapp如今的占有率越來越少,由于越來越多的人不喜歡用手機瀏覽器去體驗專門為移動平臺搭建的站點.我認為你的比較對象應該是…

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…

VS2013 Pro版本密鑰

Visual Studio Professional 2013 KEY&#xff08;密鑰&#xff09;&#xff1a; XDM3T-W3T3V-MGJWK-8BFVD-GVPKY 轉載于:https://www.cnblogs.com/Mysterious/p/5990358.html

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.瀏覽器訪問一個網頁的整個過程&#xff0c;附帶連接協議&#xff1f; 2.tcp和upd的區別&#xff1f; 3.tcp報頭&#xff1f; 4.網絡協議的7層和5層分別是什么&#xff1f; 5.ipv6的知識&#xff1f; 6.網絡分包&#xff1f; 7.求素數的改進方法&#xff1f;轉載于:https://ww…

Python 執行代碼的兩種方式

1、交互執行即黑屏命令行執行 優點:即時調時程序&#xff0c;調試方便 缺點&#xff1a;無法永久無法保存代碼 2、即文件存儲代碼執行Python代碼文件 優點&#xff1a;可以永久保存代碼 缺點&#xff1a;調試不方便轉載于:https://www.cnblogs.com/liuxiaowei/p/7163473.html

金屬圓柱求取傾斜角度

方法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)…

編程開發之--java多線程學習總結(2)同步代碼塊

1、第一種解決辦法&#xff1a;同步代碼塊&#xff0c;關鍵字synchronized package com.lfy.ThreadsSynchronize;/*** 1、使用同步代碼塊* 語法&#xff1a;synchronized (同步鎖) {//需要同步操作的代碼 }同步鎖&#xff1a;為了保證每個線程都能正常的執行原子操作&a…

swift 隨機數

1.一行代碼生成隨機數 arc4random() 如果要生成一個生成在一定范圍內的隨機整數: func randomIn(#min: Int, max: Int) -> Int { return Int(arc4random()) % (max - min 1) min} 該方法會生成[min, max]范圍內的隨機整數轉載于:https://www.cnblogs.com/qiyiyifan/p/…

u-boot裁減

http://blog.csdn.net/menuconfig/article/details/2276078u-boot裁減的主要方法是通過刪除不需要的命令來減小可執行代碼體積。比如說&#xff0c;如果不需要網絡相關的功能&#xff0c;則可以將網絡相關的所有命令全部刪除&#xff0c;可以節約可觀的flash空間。一般u-boot的…

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…

github設置添加SSH

很多朋友在用github管理項目的時候&#xff0c;都是直接使用https url克隆到本地&#xff0c;當然也有有些人使用 SSH url 克隆到本地。然而&#xff0c;為什么絕大多數人會使用https url克隆呢&#xff1f; 這是因為&#xff0c;使用https url克隆對初學者來說會比較方便&…

linux設置套接字緩沖區的大小

系統提供的socket緩沖區大小為8K&#xff0c;你可以將之設置為64K&#xff0c;尤其在傳輸實時視頻時。 socket發送數據時候先把數據發送到socket緩沖區中&#xff0c;之后接受函數再從緩沖區中取數據&#xff0c;如果發送端特別快的時候&#xff0c;緩沖區很快就被填滿&#x…