在与halcon的混编中,有时会用到数据类型转换。
例如在相机采集与后期的图像处理中,一般需要将采集到的BYTE类型数据转化成halcon中对应的Hobject类型方可处理。
在halcon11中提供了一个函数及其例程:
- void NewImage(Hobject *new)
- {
- unsigned char image[768*525];
- int r,c;
- for (r=0; r<525; r++)
- for (c=0; c<768; c++)
- image[r*768+c] = c % 255;
- gen_image1(new,"byte",768,525,(Hlong)image);
- }
复制代码 其中,gen_image1()在halcon11中的函数名称改为GenImage1();
对于彩色图像halcon提供了gen_image3()/GenImage3();
- void NewRGBImage(Hobject *new)
- {
- unsigned char red[768*525];
- unsigned char green[768*525];
- unsigned char blue[768*525];
- int r,c;
- for (r=0; r<525; r++)
- for (c=0; c<768; c++)
- {
- red[r*768+c] = c % 255;
- green[r*768+c] = (767 - c) % 255;
- blue[r*768+c] = r % 255;
- }
- gen_image3(new,"byte",768,525,(Hlong)red,(long)green,(long)blue);
- }
- main()
- {
- Hobject rgb;
- open_window(0,0,768,525,0,"","",&WindowHandle);
- NewRGBImage(&rgb);
- disp_color(rgb,WindowHandle);
- clear_obj(rgb);
- }
复制代码
另,halcon还提供了带有存储管理的函数GenImage1Extern()
- void NewImage(Hobject *new)
- {
- unsigned char *image;
- int r,c;
- image = malloc(640*480);
- for (r=0; r<480; r++)
- for (c=0; c<640; c++)
- image[r*640+c] = c % 255;
- gen_image1_extern(new,"byte",640,480,(Hlong)image,(long)free);
- }
复制代码
和GenImage3Extern()
- void NewImage(Hobject *new)
- {
- unsigned char *image_red;
- unsigned char *image_green;
- unsigned char *image_blue;
- int r,c;
- image_red = malloc(640*480);
- image_green = malloc(640*480);
- image_blue = malloc(640*480);
- for (r=0; r<480; r++)
- for (c=0; c<640; c++)
- {
- image_red[r*640+c] = c % 255;
- image_green[r*640+c] = (c+64) % 255;
- image_blue[r*640+c] = (c+128) % 255;
- }
- gen_image3_extern(new,"byte",640,480,(Hlong)image_red,(long)image_green,(long)image_blue,(long)free);
- }
复制代码
转载自:https://www.cnblogs.com/youngxin/p/4210162.html |