halcon图像合并

【 HALCON 】 将多张图片按指定位置合并平铺成一张图,读取并显示多张图片

此方法旨在满足部分区域拍照后,想输出成一张图,对重叠区域要求不是很高。区别于图像拼接方法,请注意。

在这里,我在一个文件夹中保存了9张图,遍历读取,从而合成显示。

图片合成方法

 
  1. public void ImageJigsaw(string path = "C:/Users/team/Desktop/4/"

  2. {

  3. HObject ho_Rectangle;

  4. HTuple hv_Width = new HTuple(), hv_Height = new HTuple();

  5. HTuple hv_Rows = new HTuple(), hv_Cols = new HTuple();

  6. HOperatorSet.GenEmptyObj(out ho_Rectangle);

  7. HOperatorSet.ReadImage(out h_Image, path + 1 + ".bmp");

  8. hv_Width.Dispose();

  9. hv_Height.Dispose();

  10. HOperatorSet.GetImageSize(h_Image, out hv_Width, out hv_Height);

  11. //生成一个3倍大小的空白图像

  12. h_ImageJig.Dispose();

  13. HOperatorSet.GenImageConst(out h_ImageJig, "byte", hv_Width * 3, hv_Height * 3);

  14. //生成图像全部区域

  15. ho_Rectangle.Dispose();

  16. HOperatorSet.GenRectangle1(out ho_Rectangle, 0, 0, hv_Height - 1, hv_Width - 1);

  17. //从区域生成所有的像素坐标

  18. hv_Rows.Dispose();

  19. hv_Cols.Dispose();

  20. HOperatorSet.GetRegionPoints(ho_Rectangle, out hv_Rows, out hv_Cols);

  21. for (int i = 1; i < 10; i++)

  22. {

  23. HObject ho_Image;

  24. HTuple Rows = hv_Rows;

  25. HTuple Cols = hv_Cols;

  26. HTuple Width=new HTuple();

  27. HTuple Height=new HTuple();

  28. HTuple hv_Grayvals = new HTuple();

  29. HOperatorSet.GenEmptyObj(out ho_Image);

  30. //读取图像

  31. ho_Image.Dispose();

  32. HOperatorSet.ReadImage(out ho_Image, path + i + ".bmp");

  33. HOperatorSet.Rgb1ToGray(ho_Image, out ho_Image);

  34. //灰度值转化

  35. HOperatorSet.GetImageSize(ho_Image,out Width,out Height);

  36. HOperatorSet.SetPart(h_hWindowHandle,0,0,Height-1,Width-1);

  37. HOperatorSet.DispObj(ho_Image, h_hWindowHandle);

  38. //读取图像的全部像素

  39. hv_Grayvals.Dispose();

  40. HOperatorSet.GetGrayval(ho_Image, Rows, Cols, out hv_Grayvals);

  41. switch (i)

  42. {

  43. //将所有像素坐标加上偏移量

  44. case 1:

  45. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  46. {

  47. {

  48. HTuple

  49. ExpTmpLocalVar_Rows = Rows;

  50. Rows.Dispose();

  51. Rows = ExpTmpLocalVar_Rows;

  52. }

  53. }

  54. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  55. {

  56. {

  57. HTuple

  58. ExpTmpLocalVar_Cols = Cols;

  59. Cols.Dispose();

  60. Cols = ExpTmpLocalVar_Cols;

  61. }

  62. }

  63. break;

  64. case 2:

  65. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  66. {

  67. {

  68. HTuple

  69. ExpTmpLocalVar_Rows = Rows;

  70. Rows.Dispose();

  71. Rows = ExpTmpLocalVar_Rows;

  72. }

  73. }

  74. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  75. {

  76. {

  77. HTuple

  78. ExpTmpLocalVar_Cols = Cols + (hv_Width);

  79. Cols.Dispose();

  80. Cols = ExpTmpLocalVar_Cols;

  81. }

  82. }

  83. break;

  84. case 3:

  85. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  86. {

  87. {

  88. HTuple

  89. ExpTmpLocalVar_Rows = Rows;

  90. Rows.Dispose();

  91. Rows = ExpTmpLocalVar_Rows;

  92. }

  93. }

  94. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  95. {

  96. {

  97. HTuple

  98. ExpTmpLocalVar_Cols = Cols + (hv_Width * 2);

  99. Cols.Dispose();

  100. Cols = ExpTmpLocalVar_Cols;

  101. }

  102. }

  103. break;

  104. case 4:

  105. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  106. {

  107. {

  108. HTuple

  109. ExpTmpLocalVar_Rows = Rows + (hv_Height);

  110. Rows.Dispose();

  111. Rows = ExpTmpLocalVar_Rows;

  112. }

  113. }

  114. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  115. {

  116. {

  117. HTuple

  118. ExpTmpLocalVar_Cols = Cols + (hv_Width * 2);

  119. Cols.Dispose();

  120. Cols = ExpTmpLocalVar_Cols;

  121. }

  122. }

  123. break;

  124. case 5:

  125. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  126. {

  127. {

  128. HTuple

  129. ExpTmpLocalVar_Rows = Rows + (hv_Height);

  130. Rows.Dispose();

  131. Rows = ExpTmpLocalVar_Rows;

  132. }

  133. }

  134. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  135. {

  136. {

  137. HTuple

  138. ExpTmpLocalVar_Cols = Cols + (hv_Width);

  139. Cols.Dispose();

  140. Cols = ExpTmpLocalVar_Cols;

  141. }

  142. }

  143. break;

  144. case 6:

  145. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  146. {

  147. {

  148. HTuple

  149. ExpTmpLocalVar_Rows = Rows + (hv_Height);

  150. Rows.Dispose();

  151. Rows = ExpTmpLocalVar_Rows;

  152. }

  153. }

  154. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  155. {

  156. {

  157. HTuple

  158. ExpTmpLocalVar_Cols = Cols;

  159. Cols.Dispose();

  160. Cols = ExpTmpLocalVar_Cols;

  161. }

  162. }

  163. break;

  164. case 7:

  165. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  166. {

  167. {

  168. HTuple

  169. ExpTmpLocalVar_Rows = Rows + (hv_Height * 2);

  170. Rows.Dispose();

  171. Rows = ExpTmpLocalVar_Rows;

  172. }

  173. }

  174. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  175. {

  176. {

  177. HTuple

  178. ExpTmpLocalVar_Cols = Cols;

  179. Cols.Dispose();

  180. Cols = ExpTmpLocalVar_Cols;

  181. }

  182. }

  183. break;

  184. case 8:

  185. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  186. {

  187. {

  188. HTuple

  189. ExpTmpLocalVar_Rows = Rows + (hv_Height * 2);

  190. Rows.Dispose();

  191. Rows = ExpTmpLocalVar_Rows;

  192. }

  193. }

  194. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  195. {

  196. {

  197. HTuple

  198. ExpTmpLocalVar_Cols = Cols + (hv_Width);

  199. Cols.Dispose();

  200. Cols = ExpTmpLocalVar_Cols;

  201. }

  202. }

  203. break;

  204. case 9:

  205. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  206. {

  207. {

  208. HTuple

  209. ExpTmpLocalVar_Rows = Rows + (hv_Height * 2);

  210. Rows.Dispose();

  211. Rows = ExpTmpLocalVar_Rows;

  212. }

  213. }

  214. using (HDevDisposeHelper dh = new HDevDisposeHelper())

  215. {

  216. {

  217. HTuple

  218. ExpTmpLocalVar_Cols = Cols + (hv_Width * 2);

  219. Cols.Dispose();

  220. Cols = ExpTmpLocalVar_Cols;

  221. }

  222. }

  223. break;

  224. }

  225. //将图像的所有像素覆盖到空白图像的指定区域

  226. HOperatorSet.SetGrayval(h_ImageJig, Rows, Cols, hv_Grayvals);

  227. hv_Grayvals.Dispose();

  228. ho_Image.Dispose();

  229. Rows.Dispose();

  230. Cols.Dispose();

  231. }

  232. hv_Width.Dispose();

  233. hv_Height.Dispose();

  234. HOperatorSet.GetImageSize(h_ImageJig, out hv_Width, out hv_Height);

  235. HOperatorSet.SetPart(h_hWindowHandle, 0, 0, hv_Height, hv_Width);

  236. HOperatorSet.DispObj(h_ImageJig, h_hWindowHandle);

  237. hv_Rows.Dispose();

  238. hv_Cols.Dispose();

  239. ho_Rectangle.Dispose();

  240. h_ImageJig.Dispose();

  241. }

FORM调用显示效果

你要的HALCON源码

 
  1. * 读图

  2. ImageFiles := []

  3. ImageFiles[0] := 'I:/Data_Nick/素材/4/1.bmp'

  4. ImageFiles[1] := 'I:/Data_Nick/素材/4/2.bmp'

  5. ImageFiles[2] := 'I:/Data_Nick/素材/4/3.bmp'

  6. ImageFiles[3] := 'I:/Data_Nick/素材/4/4.bmp'

  7. ImageFiles[4] := 'I:/Data_Nick/素材/4/5.bmp'

  8. ImageFiles[5] := 'I:/Data_Nick/素材/4/6.bmp'

  9. ImageFiles[6] := 'I:/Data_Nick/素材/4/7.bmp'

  10. ImageFiles[7] := 'I:/Data_Nick/素材/4/8.bmp'

  11. ImageFiles[8] := 'I:/Data_Nick/素材/4/9.bmp'

  12. *根据图片大小创建空白图像

  13. read_image (Image, ImageFiles[0])

  14. get_image_size (Image, Width, Height)

  15. gen_image_const (ImageJig, 'byte', Width*3, Height*3)

  16. *获得单个图片的所有像素坐标

  17. gen_rectangle1 (Rectangle, 0, 0, Height-1, Width-1)

  18. get_region_points (Rectangle, Rows, Columns)

  19. *对每张图片操作

  20. for Index := 0 to |ImageFiles| - 1 by 1

  21. RowsT:=0

  22. ColsT:=0

  23. read_image (Image, ImageFiles[Index])

  24. *转灰

  25. rgb1_to_gray (Image, GrayImage)

  26. *根据像素点读取全部像素

  27. get_grayval (GrayImage, Rows, Columns, Grayval)

  28. *加偏移量,将所有像素点存入对应位置

  29. switch (Index)

  30. case 0:

  31. RowsT:=Rows

  32. ColsT:=Columns

  33. break

  34. case 1:

  35. RowsT:=Rows

  36. ColsT:=Columns+Width

  37. break

  38. case 2:

  39. RowsT:=Rows

  40. ColsT:=Columns+Width*2

  41. break

  42. case 3:

  43. RowsT:=Rows+Height

  44. ColsT:=Columns+Width*2

  45. break

  46. case 4:

  47. RowsT:=Rows+Height

  48. ColsT:=Columns+Width

  49. break

  50. case 5:

  51. RowsT:=Rows+Height

  52. ColsT:=Columns

  53. break

  54. case 6:

  55. RowsT:=Rows+Height*2

  56. ColsT:=Columns

  57. break

  58. case 7:

  59. RowsT:=Rows+Height*2

  60. ColsT:=Columns+Width

  61. break

  62. case 8:

  63. RowsT:=Rows+Height*2

  64. ColsT:=Columns+Width*2

  65. break

  66. endswitch

  67. *填入像素

  68. set_grayval (ImageJig, RowsT, ColsT, Grayval)

  69. endfor

  70. *显示合成图像

  71. dev_display (ImageJig)

 HALCON界面

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值