码迷,mamicode.com
首页 > 其他好文 > 详细

zw版_Halcon图像数据交换和全内存计算.TXT

时间:2015-10-02 17:19:54      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

zw版_Halcon图像数据交换和全内存计算.TXT

       Halcon由于效率和其他原因,内部图像采用了很多自有格式,提高运行速度,但在数据交换方面非常麻烦。
  特别是基于com、net控件模式的二次开发,无论是c,vb,还是delphi,目前都没有一种理想的解决方案。
  目前,一般采用的以下两种方式进行转换:

    • hobject桥接模式,内存拷贝,通道分离
    • 外部硬盘文件交换

  hobject桥接模式,参见:zw版【转发·台湾nvp系列Delphi例程】HALCON HImage与Bitmap格式转换
  http://www.cnblogs.com/ziwang/p/4851481.html
  非常复杂,是基于内存地址+通道分离等手段,先把图像数据转换为hobjet,再进行交换。
  这种桥接模式,效率也不高,容易出现内存冲突,而且最大的问题是,转换后的图像全部是灰度图像,丢失了真彩色数据。
  因此,目前一线操作中,通常采用文件格式进行数据交换,不过纯硬盘的文件交换,速度很慢,特别是某些实时项目和大批量项目。

  为此,笔者通过实践,在工程中提出了一种全新的解决方法,ramdisk,采用内存虚拟盘。
  目前,内存价格很低,8G基本是标配,笔者的推荐配置32G以上,最好是:e3 cpu+大容量 服务器主板,组建128G以上的全内存运算环境,
  把整个系统,包括wdndows,Halcon、项目软件,全部copy到ram里面,进行全内存计算。
  HP目前正在研发的:the machine,据说就是完全放弃了外部磁盘。
  ramdisk软件,目前有很多,常见的有amd、软媒内存盘,一般采用单文件的软媒内存盘,附件有下载:

  http://files.cnblogs.com/files/ziwang/RamDisk.zip
  操作很简单,大家自己百度。

 

  如果只是数据交换,通常建立512M内存的ramdisk就足够了,128M也可以。
  在个别极端大批量项目(上万个小图片),以及压力测试中,笔者曾经在8G win64 i7平台,建立了4G的ramdisk,24小时高强度、满负荷运行,完全没有任何问题。
  ddr3-1333的速度,是10G/s,是ssd(500M/s)的20倍以上,是硬盘的500-1000倍。
  因此,采用ramdisk、全内存计算模式,是一个价格低廉,便于扩展的工程实施方案。

  采用ramdisk模式的另外一个好处是,便于和第三方图像控件,高效交换数据。
  以delphi为例,Haclon和许多工业相机的数据交换,都是采用bmp格式,没压缩,占内存、速度慢,而且缺乏alpha通道、以及图像元数据信息。
  实际开发当中,一般都是采用graphics32的bitmap32控件。


  下面,我们看看,ramdisk版本的hello程序,全部源码如下。

 

procedure hello_zw02();
var
  ximg:THImageX;
  bmp32:tbitmap32;
begin
  bmp32:=tbitmap32.create;
  ximg := THImageX.Create(nil);
  ximg.ReadImage(‘tmp\hello_zw24.png‘);

  bmp32.LoadFromFile(‘tmp\hello_zw24.png‘);
  bmp32.saveToFile(‘tmp\hello_zw_bmp.bmp‘);

  FreeAndNil(ximg);FreeAndNil(bmp32);
end;

  


【《zw版·delphi与halcon系列原创教程》,网址,cnblogs.com/ziwang/】

zw版_Halcon图像数据交换和全内存计算.TXT

标签:

原文地址:http://www.cnblogs.com/ziwang/p/4852323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!