HALCON示例程序count_fish_sticks.hdev魚棒完整性檢測

HALCON示例程序count_fish_sticks.hdev魚棒完整性檢測

示例程序源碼(加注釋)

  • 關于顯示類函數解釋
    dev_update_off ()
    dev_close_window ()
    read_image (Image, ‘food/fish_stick_package_01’)
    get_image_size (Image, Width, Height)
    dev_open_window (0, 0, Width * .9, Height * .9, ‘black’, WindowHandle)
    set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
    dev_set_draw (‘margin’)
    dev_open_window (0, Width * .9 + 12, 420, 150, ‘black’, GraphicsWindow)
    set_display_font (GraphicsWindow, 16, ‘mono’, ‘true’, ‘false’)
    dev_set_color (‘yellow’)
  • 讀入圖片
    NumImages := 6
    for Index := 1 to NumImages by 1
    read_image (Image, ‘food/fish_stick_package_’ + Index$‘02’)
    • 二值化
      threshold (Image, Region, 100, 255)
    • 使用圓形元素進行閉運算
      closing_circle (Region, RegionClosing, 5)
    • 填充孔洞
      fill_up (RegionClosing, RegionFillUp)
    • 求取區域不想交部分
      difference (RegionFillUp, RegionClosing, RegionDifference)
    • 填充孔洞
      fill_up (RegionDifference, RegionFillUp1)
    • 使用圓形元素進行閉運算
      closing_circle (RegionFillUp1, RegionClosing1, 10)
    • 求取區域的可旋轉的最小外接矩形
      smallest_rectangle2 (RegionClosing1, Row, Column, Phi, Length1, Length2)
      MeasureLength1 := Length1 - 5
    • 生成一個可旋轉矩形框
      gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, 80)
    • gen_measure_rectangle2提取垂直于矩形的直邊。
    • gen_measure_rectangle2(::行坐標,列坐標,角度,矩形長度/2,矩形寬度/2,測量寬度,測量高度,算法:測量句柄)
      gen_measure_rectangle2 (Row, Column, Phi, MeasureLength1, 60, Width, Height, ‘nearest_neighbor’, MeasureHandle)
    • measure_projection - 提取垂直于矩形或環形弧的一維灰度值輪廓。
    • measure_projection(圖片:: 測量句柄:灰度值)
      measure_projection (Image, MeasureHandle, GrayValues)
    • 關閉測量句柄
      close_measure (MeasureHandle)
    • create_funct_1d_array - 從一系列y值創建一個函數。
    • create_funct_1d_array(::: Y值:函數)
      create_funct_1d_array (GrayValues, Function)
    • local_min_max_funct_1d - 計算函數的局部最小點和最大點。
    • local_min_max_funct_1d(::功能,模式,插值:最小,最大)
      local_min_max_funct_1d (Function, ‘plateaus_center’, ‘true’, Minima, Maxima)
    • get_y_value_funct_1d - 返回指定X位置的函數Y的值。
    • get_y_value_funct_1d(::函數,X位置,邊界處理方法:Y的值)
      get_y_value_funct_1d (Function, Minima, ‘mirror’, YValues)
    • 這句話的所有關于數組操作的算子解釋貼子,這句話就是篩選局部最小值低于50的點。
      SelectedMinima := subset(Minima,find(sgn(YValues - 50),-1))
      Num := |SelectedMinima| + 1
      StickEdges := [-5,SelectedMinima,2 * MeasureLength1 + 5]
      StickWidth := StickEdges[1:Num] - StickEdges[0:Num - 1]
    • 計算每個魚塊的中心點與邊界,并畫X
      BorderX := Column + cos(Phi) * (MeasureLength1 * ((StickEdges - MeasureLength1) / MeasureLength1))
      BorderY := Row - sin(Phi) * (MeasureLength1 * ((StickEdges - MeasureLength1) / MeasureLength1))
      CenterX := (BorderX[1:Num] + BorderX[0:Num - 1]) / 2
      CenterY := (BorderY[1:Num] + BorderY[0:Num - 1]) / 2
      gen_cross_contour_xld (BorderCross, BorderY, BorderX, 15, rad(45))
      gen_cross_contour_xld (CenterCross, CenterY, CenterX, 15, rad(45))
    • 篩選大于20小于48的魚塊
      IndexFish := find(sgn(StickWidth - 20),1)
      if (IndexFish != -1)
      NumFish := |IndexFish|
      gen_rectangle2 (FishRegions, subset(CenterY,IndexFish), subset(CenterX,IndexFish), gen_tuple_const(NumFish,Phi), subset(StickWidth,IndexFish) / 2, gen_tuple_const(NumFish,Length2) / 2)
      else
      NumFish := 0
      endif
      gen_empty_region (Flipped)
      IndexFlipped := find(sgn(StickWidth - 48),1)
      if (IndexFlipped != -1)
      NumFlipped := |IndexFlipped|
      gen_rectangle2 (Flipped, subset(CenterY,IndexFlipped), subset(CenterX,IndexFlipped), gen_tuple_const(NumFlipped,Phi), subset(StickWidth,IndexFlipped) / 2, gen_tuple_const(NumFlipped,Length2) / 2)
      else
      NumFlipped := 0
      endif
    • 顯示結果
      dev_set_window (GraphicsWindow)
      dev_clear_window ()
    • plot_funct_1d - 此過程繪制表示坐標系中函數或曲線的元組。這個不是很常用。
      plot_funct_1d (GraphicsWindow, Function, [], [], ‘yellow’, ‘axes_color’, ‘none’)
      disp_message (GraphicsWindow, ‘Gray Profile’, ‘window’, 12, 12, ‘white’, ‘false’)
      dev_set_window (WindowHandle)
      dev_clear_window ()
      dev_display (Image)
      dev_set_color (‘yellow’)
      dev_set_line_width (1)
      dev_display (FishRegions)
      dev_display (BorderCross)
      dev_set_color (‘red’)
      dev_set_line_width (3)
      dev_display (Flipped)
      if (NumFish == 15 and NumFlipped == 0)
      String := ‘OK’
      Color := ‘green’
      else
      String := ‘Not OK’
      Color := ‘red’
      endif
      String[1] := ‘Number of fish sticks:’ + NumFish′3′if(NumFish!=15)Color:=[Color,′red′]elseColor:=[Color,′white′]endifif(NumFlipped!=0)String[2]:=′Flippedfishsticks:′+NumFlipped'3' if (NumFish != 15) Color := [Color,'red'] else Color := [Color,'white'] endif if (NumFlipped != 0) String[2] := 'Flipped fishsticks: ' + NumFlipped3if(NumFish!=15)Color:=[Color,red]elseColor:=[Color,white]endifif(NumFlipped!=0)String[2]:=Flippedfishsticks:+NumFlipped’3’
      Color := [Color,‘red’]
      endif
      disp_message (WindowHandle, String, ‘window’, 12, 12, Color, ‘false’)
      dev_set_color (Color[0])
      dev_display (Rectangle)
      if (Index < NumImages)
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      stop ()
      endif
      endfor

處理思路

這個例子是主要講解了二維測量的方法。使用的是gen_measure_rectangle2、measure_projection、create_funct_1d_array 、local_min_max_funct_1d、get_y_value_funct_1d完成的測量,當然后續會有更簡單的直觀的方法。

后記

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

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

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

相關文章

關于相機標定的問題答復網友

網友snow2012720 我剛開始學習計算機視覺的雙目三維重建內容&#xff0c;感覺好多內容不懂&#xff0c;看到你的博文&#xff0c;了解到你對雙目標定三維重建這些有深入的研究&#xff0c;您是過來人了&#xff0c;能否幫忙給我在學習標定匹配三維重建過程中給予指點&#xff…

轉:ORACLE的JDBC連接方式:OCI和THIN

oracle的jdbc連接方式:oci和thin oci和thin是Oracle提供的兩套Java訪問Oracle數據庫方式。 thin是一種瘦客戶端的連接方式&#xff0c;即采用這種連接方式不需要安裝oracle客戶端,只要求classpath中包含jdbc驅動的jar包就行。thin就是純粹用Java寫的ORACLE數據庫訪問接口。oci是…

軟工網絡15個人閱讀作業2——提問題

提出問題 快速通讀教材《構建之法》&#xff0c;并參照提問模板&#xff0c;提出5個問題。 問題一&#xff1a; p83有一段話&#xff1a; 兩人在一起合作&#xff0c;自然會出現不同意見&#xff0c;每個人都有自己的想法&#xff0c;在兩個人平等合作的情況下&#xff0c;不存…

HALCON示例程序count_pellets.hdev分割豆子,基本形態學的使用

HALCON示例程序count_pellets.hdev分割豆子&#xff0c;基本形態學的使用 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () read_image (Image, ‘pellets’) dev_close_window () get_image_size (Image, Width, Height) dev_open_window…

絕對路徑VS相對路徑

絕對路徑&#xff1a;不必贅述&#xff0c;就是從盤符開始寫直到找到你所需要的文件為止&#xff0c;把所有的目錄寫完整即可。但是在做網站的時候絕對不推薦用絕對路徑&#xff0c;因為不可能服務器中的路徑和在做設計時候所用的電腦的路徑一致&#xff0c;也不可能說在服務器…

四、極大似然參數估計

四、極大似然參數估計 此篇博文&#xff0c;玉米將和大家分享一下“張氏標定”除幾何推導外的另外一大精髓&#xff1a;參數估計。 張教授在大作“A Flexible New Technique for Camera Calibration”中的原話如下&#xff1a;” The above solution is obtained through minim…

xtrabackup安裝使用

2019獨角獸企業重金招聘Python工程師標準>>> 【MySQL】xtrabackup安裝使用 拾荒者charley 關注 2018.03.19 09:19 字數 186 閱讀 17評論 0喜歡 0 前言&#xff1a;說到MySQL備份&#xff0c;主要采用的方法無非就是mysqldump/mysqldumper以及我們今天要說的熱備利器…

HALCON示例程序crystal.hdev通過局部閾值處理和區域處理提取六角形晶體

HALCON示例程序crystal.hdev通過局部閾值處理和區域處理提取六角形晶體 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_close_window () dev_update_window (‘off’) read_image (Image, ‘crystal’) get_image_size (Image, Width, Height) dev_ope…

2017/3/10 morning

轉載于:https://www.cnblogs.com/bgd140206325/p/6529497.html

六、張正友標定法小結

六、張正友標定法小結 這一博文&#xff0c;是玉米后補上的。因為覺得前面用了三篇博文來描述張氏標定法&#xff0c;略顯散亂。在這里總結一下&#xff0c;使條理清晰一點。另外關于張氏標定所得參數也還有兩點需要澄清。下面這個總結&#xff0c;其實也是在“A Flexible New …

SqlServer圖形數據庫初體驗

SQL Server2017新增了一個新功能叫做圖形數據庫。圖形指的拓撲圖形&#xff0c;是一些Node表和Edge表的合集&#xff0c;Node對應關系數據庫中的實體&#xff0c;比如一個人、一個崗位等&#xff0c;Edge表指示Node之前的關系&#xff0c;比如張三在經理崗位。圖形表比較適合用…

HALCON示例程序dem_trees.hdev提取樹

HALCON示例程序dem_trees.hdev提取樹 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_close_window () read_image (Mreut, ‘mreut_y’) read_image (MreutDem, ‘mreut_dgm_2.0’) get_image_size (Mreut, Width, Height) dev_open_window (0, 0, Wid…

Oracle CASE WHEN 用法介紹

1. CASE WHEN 表達式有兩種形式 --簡單Case函數 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其他 END --Case搜索函數 CASEWHEN sex 1 THEN 男 WHEN sex 2 THEN 女 ELSE 其他 END 2. CASE WHEN 在語句中不同位置的用法 2.1 SELECT CASE WHEN 用法 SELECT grad…

Golang 處理 Json(二):解碼

golang 編碼 json 還比較簡單&#xff0c;而解析 json 則非常蛋疼。不像 PHP 一句 json_decode() 就能搞定。之前項目開發中&#xff0c;為了兼容不同客戶端的需求&#xff0c;請求的 content-type 可以是 json&#xff0c;也可以是 www-x-urlencode。然后某天前端希望某個后端…

五、畸變矯正—讓世界不在扭曲

五、畸變矯正—讓世界不在扭曲 這篇博文所要講述的內容&#xff0c;是標定的主要用途之一&#xff1a;矯正攝像機的畸變。對于圖像畸變矯正的方法&#xff0c;張正友教授也在其大作“A Flexible New Technique forCamera Calibration”中給出。 玉米在這里先為大家介紹一下&…

第二階段個人沖刺08

昨天做了什么&#xff1f; 解決新建項目時會遇到“Your android sdk is out of date or is missing templates”的問題&#xff0c;&#xff0c;實現學生交流區&#xff0c;只有學生和管理員有權查看&#xff0c;教師無權查看的功能 今天要做什么&#xff1f; 實現學生交流區&a…

HALCON示例程序distance_transform.hdev通過distance_transform檢測線的缺陷

HALCON示例程序distance_transform.hdev通過distance_transform檢測線的缺陷 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_close_window () dev_open_window (0, 0, 400, 400, ‘black’, WindowHandle)通過一系列的坐標點生成多邊形像素輪廓 gen_re…

java面試-Java并發編程(二)——重排序

當我們寫一個單線程程序時&#xff0c;總以為計算機會一行行地運行代碼&#xff0c;然而事實并非如此。 什么是重排序&#xff1f; 重排序指的是編譯器、處理器在不改變程序執行結果的前提下&#xff0c;重新排列指令的執行順序&#xff0c;以達到最佳的運行效率。 重排序分類 …

《MySQL必知必會》[01] 基本查詢

《MySQL必知必會》&#xff08;點擊查看詳情&#xff09;1、寫在前面的話這本書是一本MySQL的經典入門書籍&#xff0c;小小的一本&#xff0c;也受到眾多網友推薦。之前自己學習的時候是啃的清華大學出版社的計算機系列教材《數據庫系統概論》&#xff0c;基礎也算是半罐水&am…

(七)立體標定與立體校正 【計算機視覺學習筆記--雙目視覺幾何框架系列】

七、立體標定與立體校正 這篇博文中&#xff0c;讓玉米和大家一起了解一下&#xff0c;張氏標定是怎樣過渡到立體標定的&#xff1f;在這里主要以雙目立體視覺進行分析。對于雙目立體視覺&#xff0c;我們有兩個攝像頭。它們就像人的一雙眼睛一樣&#xff0c;從不同的方向看世界…