1. 程式人生 > >Halcon基於dev_set_part顯示圖片正常長寬比的方法

Halcon基於dev_set_part顯示圖片正常長寬比的方法

回顧

之前博文中,曾經提到,通過計算欲顯示圖片和視窗控制元件長、寬比例,對影象本身進行放縮,再進行顯示的方法。 現在看來是因為當時對dev_set_part這個運算元的理解不到位造成的。 Halcon/C#混合程式設計實現任意圖片的原始長寬比顯示+形狀匹配定位

之前方法的缺點

之前的方法雖然也看似完成了目標,但是需要對圖片本身進行放縮處理。這就使得在UI互動時,互動得到的位置座標需要進行換算方可對應到影象的實際畫素座標。

正確的理解思路

想像我們有一張桌子,桌子上放了一個手機,現在我們用一個相機去給手機拍照,怎樣讓手機看起來佔圖片更大一些呢? 之前的方法相當於,我們把拍照用的相機位置固定了,然後,把真實世界的手機給放縮了。 正確的思路應該是,我們去調整相機的位置,遠近,使手機在相片中的位置和大小顯得變化了。事實上,真實的手機是沒有辦法放大和縮小的。

dev_set_part

這個運算元其實就相當於是你用來拍照的相機。它一共有五個輸入引數,第一個是視窗控制元件,後面四個是取景視野在真實世界中的左上角(列、行)和右下角座標(列、行)。

實現

基於這個運算元的功能,以下例證

dev_close_window ()
dev_open_window (0, 0, 400, 480, 'gray', WindowHandle)
set_window_param (WindowHandle, 'save_depth_buffer', 'true')
dev_clear_window ()
dev_update_window ('off')
dev_open_file_dialog (
'read_image', 'default', 'default', Selection) read_image (Image, Selection) get_window_extents (WindowHandle, Row, Column, winWidth, winHeight) showPicture (Image, winWidth, winHeight) gen_rectroi (WindowHandle, winHeight, winWidth, Row3, Column3, Phi, Length1, Length2)

以下是showPicture的內容:

set_system (
'int_zooming', 'false') get_image_size (Image, Width, Height) picWHRatio := 1.0 * Width / Height winWHRatio := 1.0 * winWidth / winHeight if (Width > winWidth or Height > winHeight) * 如果圖片寬高比 大於 視窗寬高比 * 則寬度方向頂格 if (picWHRatio >= winWHRatio) dispWidth := Width dispHeight := Width / winWHRatio dev_set_part (0, 0, dispHeight, dispWidth) dev_display (Image) endif * 如果圖片寬高比 小於 視窗寬高比 * 則高度方向頂格 if (picWHRatio < winWHRatio) dispWidth := Height * winWHRatio dispHeight := Height dev_set_part (0, 0, dispHeight, dispWidth) dev_display (Image) endif else * 如果圖片的長和寬都小於視窗,則以圖片的原真實尺寸顯示 dev_set_part (0, 0, winHeight, winWidth) dev_display (Image) endif return ()

以下是gen_rectroi的內容

dev_set_colored (3)
draw_rectangle2_mod (WindowHandle, winHeight/2.0-1, winWidth/2.0-1, 0, winWidth/4.0, winHeight/4.0, Row3, Column3, Phi, Length1, Length2)
dev_set_color ('green')
gen_rectangle2_contour_xld (Rectangle, Row3, Column3, Phi, Length1, Length2)
dev_display (Rectangle)
dev_set_colored (3)

return ()

驗證

採用一張264×245大小的圖片,視窗的大小設定為400×480 則得到的顯示為 在這裡插入圖片描述 作為對比,如果不調整顯示區域,則預設填充整個視窗 在這裡插入圖片描述

C#例程程式碼

下載地址