HALCON示例程序measure_grid.hdev使用XLD分割鍵盤輪廓

HALCON示例程序measure_grid.hdev使用XLD分割鍵盤輪廓

示例程序源碼(加注釋)

  • 關于顯示類函數解釋
    dev_update_off ()
    read_image (Image, ‘keypad’)
    get_image_pointer1 (Image, Pointer, Type, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width, Height, ‘white’, WindowHandle)
    set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
    dev_display (Image)
    dev_set_colored (3)
    dev_set_draw (‘fill’)
  • 動態閾值分割,提取連接區域
    mean_image (Image, ImageMean, 7, 7)
    dyn_threshold (Image, ImageMean, RegionDynThresh, 4, ‘dark’)
  • 分割連通域
    connection (RegionDynThresh, ConnectedRegions)
  • 使用最大長度和最大直徑篩選區域
    select_shape (ConnectedRegions, SelectedRegions, [‘max_diameter’,‘contlength’], ‘and’, [200,800], [99999,99999])
  • 使用圓形元素進行閉運算
    closing_circle (SelectedRegions, RegionClosing, 1.5)
    dev_display (Image)
    dev_display (RegionClosing)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()
  • 提取骨架
    skeleton (RegionClosing, Skeleton)
  • 將骨架轉化為XLD輪廓
    gen_contours_skeleton_xld (Skeleton, ContoursSkeleton, 1, ‘filter’)
  • 分割XLD輪廓
    segment_contours_xld (ContoursSkeleton, ContoursSplitSkeleton, ‘lines’, 5, 2, 1)
  • 使用連續長度篩選XLD輪廓
    select_contours_xld (ContoursSplitSkeleton, SelectedContours, ‘contour_length’, 30, 1000, -0.5, 0.5)
  • union_collinear_contours_xld - 聯合近似共線的輪廓。
    union_collinear_contours_xld (SelectedContours, UnionCollinearContours, 100, 10, 20, rad(10), ‘attr_keep’)
    dev_display (Image)
    dev_display (UnionCollinearContours)
    disp_continue_message (WindowHandle, ‘black’, ‘true’)
    stop ()
  • 計數
    count_obj (UnionCollinearContours, NumberContours)
    gen_empty_obj (LinesHorizontal)
    gen_empty_obj (LinesVertical)
for i := 1 to NumberContours by 1select_obj (UnionCollinearContours, ObjectSelected, i)* 擬合直線XLD輪廓fit_line_contour_xld (ObjectSelected, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)* 由點生成多邊形XLD輪廓gen_contour_polygon_xld (Contour, [RowBegin,RowEnd], [ColBegin,ColEnd])Phi := atan2(-Nr,Nc)if (abs(Phi) < rad(5))concat_obj (LinesVertical, Contour, LinesVertical)endifif (rad(85) < abs(Phi) and abs(Phi) < rad(95))concat_obj (LinesHorizontal, Contour, LinesHorizontal)endif
endfor

dev_display (Image)
dev_set_color (‘red’)
dev_display (LinesVertical)
dev_set_color (‘yellow’)
dev_display (LinesHorizontal)
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
RowJunction := []
ColJunction := []
RowRealJunction := []
ColRealJunction := []
count_obj (LinesHorizontal, NumberLH)
count_obj (LinesVertical, NumberLV)

for i := 1 to NumberLH by 1select_obj (LinesHorizontal, HorizontalLine, i)* get_contour_xld  - 返回XLD輪廓的坐標。get_contour_xld (HorizontalLine, RowHorizontal, ColHorizontal)for j := 1 to NumberLV by 1select_obj (LinesVertical, VerticalLine, j)get_contour_xld (VerticalLine, RowVertical, ColVertical)* intersection_lines  - 計算兩條線的交點intersection_lines (RowHorizontal[0], ColHorizontal[0], RowHorizontal[1], ColHorizontal[1], RowVertical[0], ColVertical[0], RowVertical[1], ColVertical[1], Row, Column, IsOverlapping)* distance_ps  - 計算點和線段之間的距離distance_ps (Row, Column, RowHorizontal[0], ColHorizontal[0], RowHorizontal[1], ColHorizontal[1], DistanceH, DistanceHMax)distance_ps (Row, Column, RowVertical[0], ColVertical[0], RowVertical[1], ColVertical[1], DistanceV, DistanceVMax)RowJunction := [RowJunction,Row]ColJunction := [ColJunction,Column]if ((DistanceH <= 30) and (DistanceV <= 30))RowRealJunction := [RowRealJunction,Row]ColRealJunction := [ColRealJunction,Column]endifendfor
endfor

dev_set_color (‘white’)
gen_cross_contour_xld (Cross, RowJunction, ColJunction, 12, 0.785398)
dev_display (Cross)
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
dev_display (Image)
dev_set_color (‘gray’)
dev_display (LinesHorizontal)
dev_display (LinesVertical)
dev_set_color (‘white’)
gen_cross_contour_xld (Cross, RowRealJunction, ColRealJunction, 12, 0.785398)
dev_display (Cross)
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
set_display_font (WindowHandle, 14, ‘mono’, ‘true’, ‘false’)
dev_display (Image)
junctions_skeleton (Skeleton, EndPoints, JuncPoints)
get_region_points (JuncPoints, RowJunctionRegionProcessing, ColumnJunctionRegionProcessing)
gen_cross_contour_xld (CrossCenter, RowJunctionRegionProcessing, ColumnJunctionRegionProcessing, 12, 0.785398)
dev_set_color (‘gray’)
dev_display (Skeleton)
dev_set_color (‘white’)
dev_display (CrossCenter)
disp_message (WindowHandle, ‘Result of corresponding’, ‘window’, 40, 10, ‘white’, ‘false’)
disp_message (WindowHandle, ‘region processing’, ‘window’, 90, 10, ‘white’, ‘false’)

處理思路

這個例子是主要講解了XLD輪廓擬合直線,進而進行測量的例子。之前我們進行便于提取是提取最外邊的輪廓,之后進行sub_edge求取邊緣進行擬合,這次不同,這次使用的是求取區域,提取區域骨架,對骨架進行XLD擬合分析。

后記

大家有什么問題可以向我提問哈,我看到了第一時間回復,希望在學習的路上多多結交良師益友。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254982.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254982.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254982.shtml

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

相關文章

[BZOJ3992]序列統計

DP一下&#xff0c;設$f_{i,j}$表示生成$i$個數且乘積$\%Mj$的方案數&#xff0c;則$f_{i1,l}\sum\limits_{jk\%Ml}[k\in S]f_{i,j}$ 我們很不希望DP式中下標的位置出現乘法&#xff0c;因為這樣不好轉移&#xff0c;考慮把乘法換成加法 因為模數$M$是質數&#xff0c;所以它有…

socket,TCP/IP的理解(轉)

TCP/IP 要想理解socket首先得熟悉一下TCP/IP協議族&#xff0c; TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;即傳輸控制協議/網間協議&#xff0c;定義了主機如何連入因特網及數據如何再它們之間傳輸的標準&#xff0c; 從字面意思來看TCP…

最小中間和

題目描述 給定一個正整數序列a1,a2,...,an&#xff0c;不改變序列中的每個元素在序列中的位置&#xff0c;把它們相加&#xff0c;并用括號記每次加法所得的和&#xff0c;稱為中間和。編程&#xff1a;找到一種方法&#xff0c;添上n-1對括號&#xff0c;加法運算依括號順序進…

HALCON示例程序measure_metal_part_extended.hdev金屬零件尺寸測量

HALCON示例程序measure_metal_part_extended.hdev金屬零件尺寸測量 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () read_image (Image, ‘metal-parts/metal-parts-01’) init_visualization (Image, 3, ‘white’, ‘margin’, Width, …

雙目匹配與視差計算

立體匹配主要是通過找出每對圖像間的對應關系&#xff0c;根據三角測量原理&#xff0c;得到視差圖&#xff1b;在獲得了視差信息后&#xff0c;根據投影模型很容易地可以得到原始圖像的深度信息和三維信息。立體匹配技術被普遍認為是立體視覺中最困難也是最關鍵的問題&#xf…

JavaEE 銀聯支付之網站支付-消費類交易

以銀聯網站支付 - 消費類交易 為例 0. 大致邏輯 前端request->后臺封裝參數->后臺進行簽名->生成跳轉頁面&#xff08;包含表單提交內容&#xff09;->響應前端&#xff08;將生成的html寫到瀏覽器中完成自動跳轉打開銀聯支付頁面&#xff09; 復制代碼1.acp_sdk.p…

react 開發知識準備

react react使用教程 babel babel 可用于ES6轉換為ES5&#xff0c;jsx轉換為原生js。 ES6 ES6 語法 webpack webpack打包工具&#xff0c;它把不同的、相互依賴的靜態資源都視作模塊&#xff0c;并且打包成我們想要的靜態資源。讓代碼組織更清晰&#xff0c;一個文件就是一個模…

Linux多線程編程(不限Linux)

——本文一個例子展開&#xff0c;介紹Linux下面線程的操作、多線程的同步和互斥。 前言 線程&#xff1f;為什么有了進程還需要線程呢&#xff0c;他們有什么區別&#xff1f;使用線程有什么優勢呢&#xff1f;還有多線程編程的一些細節問題&#xff0c;如線程之間怎樣同步、…

概率論與數理統計-ch8-假設檢驗

1、假設檢驗 在總體的分布函數未知或只知其形式、不知其參數的情況下&#xff0c;為了推斷總體的某些未知特性&#xff0c;提出關于總體的假設&#xff0c;然后根據樣本數據對提出的假設做出接受或拒絕的決策。 步驟&#xff1a; 提出原假設--確定建立在樣本基礎上的檢驗統計量…

HALCON示例程序measure_metal_part_first_example.hdev通過擬合邊緣進行尺寸測量

HALCON示例程序measure_metal_part_first_example.hdev通過擬合邊緣進行尺寸測量 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () read_image (Image, ‘metal-parts/metal-parts-01’) get_image_size (Image, Width, Height) dev_close…

簡單實現仿某寶地址選擇三級聯動樣式

內容簡單介紹實現步驟第一步 找準方向第二步 開干總結還是題外話內容簡單介紹 簡單看一下須要實現的效果&#xff0c;如圖&#xff1a; 實現步驟 第一步 找準方向 事實上就是想好要用recyclerview而不是listview。假設要問我recyclerview是什么的話。。 第二步 開干 首先須要先…

opencv雙目測距實現

雖然最近注意力已經不可遏制地被神經科學、大腦記憶機制和各種畢業活動吸引過去了&#xff0c;但是還是覺得有必要把這段時間雙目視覺方面的進展總結一下。畢竟從上一篇博文發表之后&#xff0c;很多同仁發E-mail來與我討論&#xff0c;很多原來的疑團&#xff0c;也在討論和一…

logback高級特性使用-異步記錄日志

注意&#xff1a;該功能需要高版本才能支持&#xff0c;如1.0.11。AsyncAppender&#xff0c;異步記錄日志。 工作原理&#xff1a; 當Logging Event進入AsyncAppender后&#xff0c;AsyncAppender會調用appender方法&#xff0c;append方法中在將event填入Buffer(這里選用的數…

Linux下c開發 之 線程通信(轉)

1.Linux“線程”進程與線程之間是有區別的&#xff0c;不過Linux內核只提供了輕量進程的支持&#xff0c;未實現線程模型。Linux是一種“多進程單線程”的操作系統。Linux本身只有進程的概念&#xff0c;而其所謂的“線程”本質上在內核里仍然是進程。大家知道&#xff0c;進程…

HDU 1028 Ignatius and the Princess III

//強行遞推。 xx[i][j]表示i數中第j個開頭的組合種類。 /* 最終結果[i]為 sum of(xx[i][j]) (j from 1 to i); xx[i][j]sum of (xx[i-j][k]) (k from 1 to j); 例如 xx[10][4]xx[6][1]xx[6][2]xx[6][3]xx[6][4]; xx[6][1] 1; 6111111; xx[6][2]3; 6222, 62211, 621111; xx[…

HALCON示例程序measure_metal_part_id.hdev使用xld邊緣擬合檢測零件加工是否合格

HALCON示例程序measure_metal_part_id.hdev使用xld邊緣擬合檢測零件加工是否合格 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () Imagefiles : [‘metal-parts/metal-part-model-01’,‘metal-parts/metal-parts-01’,‘metal-parts/meta…

編寫批處理文件-------基礎

第一、Windows bat 批處理文件 編寫 如何編寫批處理文件 批處理文件&#xff08;batch file&#xff09;包含一系列 DOS命令&#xff0c;通常用于自動執行重復性任務。 用戶只需雙擊批處理文件便可執行任務&#xff0c;而無需重復輸入相同指令。編寫批處理文件非常簡單&#xf…

主控芯片

主控芯片&#xff1a; 主控芯片里有310&#xff0c;320,3288&#xff0c;288,318&#xff0c;333&#xff0c;345&#xff0c;7501, 其中310是中星微發展比較早&#xff0c;比較成熟的芯片。在現在一般應用在水晶夾子之類的低端產品上。 3288也是低端芯片&#xff0c;318&…

MPEG2、H.263、H.264協議效率對比

[摘錄]1.1 MPEG2、H.263、H.264協議效率對比ITUT中定義的雙向視頻通信協議族包括&#xff1a;H.320、H.323&#xff0c;這兩個協議族中&#xff0c;包含了很多子協議&#xff0c;例如音頻編碼協議、視頻編碼協議等&#xff0c;其中視頻編碼包括&#xff1a;H.261、H.263、H.264…

WebService SOAP、Restful和HTTP(post/get)請求區別

web service&#xff08;SOAP&#xff09; Webservice的一個最基本的目的就是提供在各個不同平臺的不同應用系統的協同工作能力。 Web service 就是一個應用程序&#xff0c;它向外界暴露出一個能夠通過Web進行調用的API。 SOAP是一種簡單基于xml的輕量協議&#xff0c;用戶web…