zw版_Halcon图像交换、数据格式、以及超级简单实用的DIY全内存计算.TXT
zw版_Halcon图像交换、数据格式、以及超级简单实用的DIY全内存计算.TXT
Halcon由于效率和其他原因,内部图像采用了很多自有格式,提高运行速度,但在数据交换方面非常麻烦。
特别是基于com、net控件模式的二次开发,无论是c,vb,还是delphi,目前都没有一种理想的解决方案。
ps,2015.10.1,最近,台湾nvp发布了一种新的通过hobject<-->himagex,在vb、c、c++、c#与Halcon图像直接,进行数据转换的示例。
不过还是不支持delphi,delphi接口好像没有hobject类;有IHobjecx类,不过几个基本类,都是从接口IDispatch直接继承的,而不像vb、c、c++、c#的接口,从类hobject派生,例如:
- IHWindowX= interface(IDispatch)
- IHImageX = interface(IDispatch)
此外:
- delphi的控制指令,不是通过下划线分割,而是用首字母大写分割,与halcon内部脚本不同,例如:gen_cross_contour_xld,在vb、c、c++、c#的调用完全一致,而delphi版本是:GenCrossContourXld(这种命名方式,按理说,是v11的新格式,vb、c、c++、c#也应该采用,不过教程,包括Halcon,好像hais以前的v10版格式)
- 此外,对于tuple控件的支持,delphi、vb、c、halcon脚本的版本也不同,一般是通过olevariant变量类型进行
这些,都是用delphi调用Halcon时,需要注意的地方,也是尽量采用文件交换数据的原因之一。
目前,一般采用的以下两种方式进行图像数据交换:
- 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图像交换、数据格式、以及超级简单实用的DIY全内存计算.TXT的更多相关文章
- zw版_Halcon图像库delphi接口文件
zw版_Halcon图像库delphi接口文件 Halcon图像库delphi接口文件,根据安装时用户设置的文件目录不同,会有所差异,笔者一般安装在delphi的import目录下. 参见:& ...
- zw·10倍速大数据与全内存计算
zw·10倍速大数据与全内存计算 zw全内存10倍速计算blog,早就在博客园机器视觉栏目发过,大数据版的一直挂着,今天抽空补上. 在<零起点,python大数据与量化交易>目录中 htt ...
- 超级简单实用的前端必备技能-javascript-全屏滚动插件
fullPage.js fullPage.js是一个基于jQuery的全屏滚动插件,它能够很方便.很轻松的制作出全屏网站 本章内容将详细介绍Android事件的具体处理及常见事件. 主要功能 支持 ...
- 使用jQuery创建可删除添加行的动态表格,超级简单实用的方法
使用jQuery动态的添加和删除表格里面的行,不多说了直接上代码. <!DOCTYPE html> <html> <head> <meta charset=& ...
- 《zw版·Halcon-delphi系列原创教程》 zw版-Halcon常用函数Top100中文速查手册
<zw版·Halcon-delphi系列原创教程> zw版-Halcon常用函数Top100中文速查手册 Halcon函数库非常庞大,v11版有1900多个算子(函数). 这个Top版,对 ...
- 常用分享功能.超级简单,qq 微信 新浪微博分享
<div id="share"> <a href="javascript:void(0)" share-type="qzone&qu ...
- zw版【转发·台湾nvp系列Delphi例程】Delphi 使用 HALCON库件COM控件数据格式转换
zw版[转发·台湾nvp系列Delphi例程]Delphi 使用 HALCON库件COM控件数据格式转换 Delphi 使用 HALCON库件COM控件数据格式转换,与IHObjectX接口有关 va ...
- zw版·Halcon与delphi(兼谈opencv)
zw版·Halcon与delphi(兼谈opencv) QQ群 247994767(delphi与halcon) <Halcon与delphi>系列,早两年就想写,不过一方面,因为Halc ...
- 《zw版·delphi与Halcon系列原创教程》THOperatorSetX版hello,zw
<zw版·delphi与Halcon系列原创教程>THOperatorSetX版hello,zw 下面介绍v3版的hello,zw. Halcon两大核心控件,THImagex.THOpe ...
随机推荐
- E1114 Temp Ambient
这2天DELL服务器的指示灯变为了黄色 ,显示“ E1114 Ambient Temp exceeds allowed range“ 原来是周围环境温度超出了许可范围 ,难道最近的天真的是太冷了 ”
- CocoaPods的安装及使用/利用开源库Diplomat实现分享及第三方登录/git的使用
<<史上最简洁版本>> 1.gem sources -l查看 当前的源 //1.1 sudo -i..以下都是以管理员的身份来操作的 2.gem sources --remov ...
- Group GridView:用于.Net的分组显示的GridView
我的项目需要一个可以分组显示的GridView,我不会写,上网找了一圈,最终在国外的网站上找到的这个,比较符合我的要求,但它的分页得重写,它写了能分页,但我发现它的分页功能事实上并没有实现,也不知道是 ...
- C# 常用日期函数
我想知道取的时期是几月.几日,然后做一些统计,上网找了一些方法. --DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1 ...
- VS2013的virtualpath在当前应用程序根的外部
将项目升级到VS2013环境时,运行报"virtualpath 在当前应用程序根的外部"错误,如下图 搜寻解决方法如下: 1.禁用VS2013 IDE的浏览链接视图功能 2.在We ...
- ELK-Python(三)
不具有通用性,留作纪念. [root@GXB-CTRLCENTER python]# cat insert_uv.py #!/usr/bin/env python # -*- coding:utf-8 ...
- android handler调用post方法阻塞
1.试下用postDelayed(Runnable a, int time),因为post把消息放到Looper中就返回,但Looper中没有其他消息又会被立刻取出来执行,这样就有可能做了run中的操 ...
- [GeoServer]重拾GeoServer之安装篇
GeoServer的项目是一个完整的Java(J2EE)系统,现实了OpenGIS联盟的网络功能服务器规范和网络覆盖服务器规范,并且集成了Web地图服务器. 在大三的时候WebGIS课程中老师讲解过一 ...
- shellinabox安装
Shell In A Box(发音是shellinabox)是一款基于Web的终端模仿器,由Markus Gutschke开辟而成.它有内置的Web办事器,在指定的端口上作为一个基于Web的SSH客户 ...
- linux:lnmp环境搭建
一.准备工作(把安装环境需要使用到的包都下载好) mysql(官网):http://dev.mysql.com/downloads/ php(官网):http://php.net/downloads. ...