2021-01-07 Halcon初学者知识【8】 将图像部分内容截取并保存
Halcon的基本概念是【圖像,區域,輪廓線】,初學者務必要搞清三者區別和聯系。以下介紹如何將一個圖像的區域截取出來,保存成另外的圖像。
有些朋友反映,看不懂我帖子的意思;因此追加以下內容,用來加強概念,并用以下案例去理解概念的用途。Halcon圖像中的三個概念至關重要,那就是“圖像、區域、輪廓”
何為圖像?就是以一個矩陣模式,存儲的矩形塊,塊內每一點都有一個灰度值。
何為區域?區域類似于mask,是個二值化的結構,也就是說,區域沒有灰度的概念,只有1和0,表示“有用”像素點和“沒用”像素點,實際當中,區域只包含“有用”像素的坐標,用get_region_points函數獲取這些坐標,用get_gray_value獲取這些點對應的灰度。區域是個坐標集合,它對應了任意對象的形狀范圍,并以(row,column)的表格形式存在。根據區域提供的坐標線索,可以提取出圖像中的像素。
何為輪廓線?輪廓線也是一個集合,是區域對應的最外邊界的點的集合,也以(row,column)的表格形式存在。
以上所述,大家要注意“圖像、區域、輪廓”的數據結構不同,所起的作用也不同,通常,可以相互轉化,就是說,通過區域,得到對應的圖像,或反之。
好了,閱讀下列示范代碼:
read_image(Image,'monkey') draw_ellipse(3600,Row,Column,Phi,Radius1,Radius2) gen_ellipse(Ellipse,Row,Column,Phi,Radius1,Radius2) reduce_domain(Image,Ellipse,GrayEllipse) crop_domain(GrayEllipse, Image2) write_image(Image2, 'bmp', 0, 'e:/monk01.bmp')以上代碼中:1)Image是個圖像 2)draw_ellipse是手工在窗口(3600)上畫一個橢圓,并自動得到橢圓的中心,扇角度,長短軸。 3)gen_ellipse是正式將所畫橢圓轉化成一個區域? 4)reduce_domain是通過橢圓區域的mask獲取圖像對應位置的子圖像,輸出一個GrayEllipse是從Image摳出來的橢圓圖像區域。4)crop_domain(GrayEllipse, Image2)將該區域的圖像轉化成矩形圖像,可以存盤。
draw_ellipse(3600,Row,Column,Phi,Radius1,Radius2) gen_ellipse(Ellipse,Row,Column,Phi,Radius1,Radius2)? ? ? 以上是一對配合函數,表明先畫一個橢圓,然后再生成此橢圓對應的區域。類似的語句是:
draw_ellipse(3600,Row,Column,Phi,Radius1,Radius2) gen_ellipse_contour_xld(ContEllipse, Row, Column, Phi, Radius1, Radius2, rad(0), rad(260), 'positive', 1.5)? ? ? 以上也是一對函數,即先畫一個橢圓,然后再生成此橢圓所引生出的輪廓線。
reduce_domain(Image,Ellipse,GrayEllipse)? ? ?既然Ellipse是個區域Mask,就能同圖像做交集用算,用reduce_domain這樣的語句,操作后,結果是個圖像和區域的混合體。
crop_domain(GrayEllipse, ImagePart1) write_image(ImagePart1, 'bmp', 0, 'e:/monk01.bmp')將圖像和區域的混合體中區域部分截取出來存盤。
實驗結果:分別是 原圖,區域定義(紅),摳出的可存盤的結果圖(最右)。
?
練習題:假如我們要將猴子的兩個眼睛挖出來,存到一個文件;對于兩個不連通的區域,如何進行處理?答案如下:
以上習題告訴大家,區域可能不聯通。如眼睛,雖然兩只,但按照一個區域處理(union2(Ellipse1, Ellipse2, RegionUnion)語句)
read_image(Image,'monkey') draw_ellipse(3600,Row,Column,Phi,Radius1,Radius2) gen_ellipse(Ellipse1,Row,Column,Phi,Radius1,Radius2) draw_ellipse(3600,Row1,Column1,Phi,Radius3,Radius4) gen_ellipse(Ellipse2,Row1,Column1,Phi,Radius3,Radius4) union2(Ellipse1, Ellipse2, RegionUnion) reduce_domain(Image,RegionUnion,GrayEllipse) crop_domain(GrayEllipse, ImagePart1) write_image(ImagePart1, 'bmp', 0, 'e:/monk02.bmp')結果圖:
??
總結
以上是生活随笔為你收集整理的2021-01-07 Halcon初学者知识【8】 将图像部分内容截取并保存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021-01-05 Halcon初学者
- 下一篇: 2021-01-10 Halcon初学者