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