开启左侧

BYTE类型转换Hobject类型

[复制链接]
Princess 发表于 2019-6-9 23:35:39 | 显示全部楼层 |阅读模式
在与halcon的混编中,有时会用到数据类型转换。
例如在相机采集与后期的图像处理中,一般需要将采集到的BYTE类型数据转化成halcon中对应的Hobject类型方可处理。
在halcon11中提供了一个函数及其例程:
  1. void NewImage(Hobject *new)
  2. {
  3.   unsigned char  image[768*525];
  4.   int            r,c;
  5.   for (r=0; r<525; r++)
  6.     for (c=0; c<768; c++)
  7.       image[r*768+c] = c % 255;
  8.   gen_image1(new,"byte",768,525,(Hlong)image);
  9. }
复制代码
其中,gen_image1()在halcon11中的函数名称改为GenImage1();
对于彩色图像halcon提供了gen_image3()/GenImage3();
  1. void NewRGBImage(Hobject *new)
  2. {
  3.   unsigned char  red[768*525];
  4.   unsigned char  green[768*525];
  5.   unsigned char  blue[768*525];
  6.   int            r,c;
  7.   for (r=0; r<525; r++)
  8.     for (c=0; c<768; c++)
  9.     {
  10.       red[r*768+c]   = c % 255;
  11.       green[r*768+c] = (767 - c) % 255;
  12.       blue[r*768+c]  = r % 255;
  13.     }
  14.     gen_image3(new,"byte",768,525,(Hlong)red,(long)green,(long)blue);
  15. }

  16. main()
  17. {
  18.   Hobject  rgb;
  19.   open_window(0,0,768,525,0,"","",&WindowHandle);
  20.   NewRGBImage(&rgb);
  21.   disp_color(rgb,WindowHandle);
  22.   clear_obj(rgb);
  23. }
复制代码

另,halcon还提供了带有存储管理的函数GenImage1Extern()
  1. void NewImage(Hobject *new)
  2. {
  3.   unsigned char  *image;
  4.   int            r,c;
  5.   image = malloc(640*480);
  6.   for (r=0; r<480; r++)
  7.     for (c=0; c<640; c++)
  8.       image[r*640+c] = c % 255;
  9.   gen_image1_extern(new,"byte",640,480,(Hlong)image,(long)free);
  10. }
复制代码

和GenImage3Extern()
  1. void NewImage(Hobject *new)
  2. {
  3.   unsigned char  *image_red;
  4.   unsigned char  *image_green;
  5.   unsigned char  *image_blue;
  6.   int            r,c;
  7.   image_red = malloc(640*480);
  8.   image_green = malloc(640*480);
  9.   image_blue = malloc(640*480);
  10.   for (r=0; r<480; r++)
  11.     for (c=0; c<640; c++)
  12.     {
  13.       image_red[r*640+c] = c % 255;
  14.       image_green[r*640+c] = (c+64) % 255;
  15.       image_blue[r*640+c] = (c+128) % 255;
  16.     }
  17.   gen_image3_extern(new,"byte",640,480,(Hlong)image_red,(long)image_green,(long)image_blue,(long)free);
  18. }
复制代码

转载自:https://www.cnblogs.com/youngxin/p/4210162.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表