一种图像参数传递方法及系统的制作方法

文档序号:6640982阅读:192来源:国知局
一种图像参数传递方法及系统的制作方法
【专利摘要】本发明公开了一种图像参数传递方法及系统,所述方法包括:在基于C#开发的应用层中,将原图像对象保存至内存块中,并获取原图像对象的内存地址,然后将原图像对象的内存地址以及原图像的长度、宽度参数一起传给基于C++的图像处理模块;在基于C++开发的图像处理模块中,根据获取的原图像对象的内存地址以及原图像的长度、宽度参数,加载内存块中的原图像信息,并对原图像进行处理,然后将处理后的图像信息保存至所述内存块中以覆盖原图像信息;在基于C#开发的应用层中,解除内存锁,重新加载内存地址中的图像对象,得到处理后的图像信息,从而获取效果图。本发明方法及系统提升了图像处理的整体效率,同时保障了图像数据的完整性与安全性。
【专利说明】一种图像参数传递方法及系统

【技术领域】
[0001] 本发明涉及一种参数传递方法,尤其是一种图像参数传递方法及系统。属于图像 处理领域。

【背景技术】
[0002] 在目前众多的编程语言中,C++凭着更接近计算机系统底层的特点,以及其安全 性、简洁性,在图像处理上建立了较大的优势,还拥有着成熟的图像处理类库,如openCV,这 些优点使得C++成为图像处理的首选;而.NET的C#语言在微软提供的强大的类库以及开 发工具下,能快速的进行应用层的开发。因此在项目中,由C#负责开发应用界面,然后调用 C++开发的图像处理模块进行图像处理操作,如图1所示。
[0003] 在两个编程语言中,C++常用CBitmap对象保存图像信息,而C#是用Bitmap对象 保存图像位图信息,这两种对象不是基本数据类型,所以不能直接传递;而字符信息是通用 的数据类型,基于这一点,C#先是用包含原图像信息的Bitmap对象生成原图像文件(本地 JPG文件),然后把生成的文件路径通过字符信息传入C++,而C++在接收到完整的字符信息 后,根据这个路径去读取相应的原图像文件,再把原图像转换成自己专属的CBitmap对象, 这样就完成了原图像信息的传递,如图2所示。
[0004] 在完成原图像信息传递之后,C++开发的图像处理模块会根据内容对原图像进行 处理,然后将CBitmap对象保存为效果图文件(本地JPG文件),再通过字符传递效果图路 径,C#获得效果图路径后便可以通过路径将文件转换成Bitmap对象,完成整个图像处理的 流程,如图3所示。
[0005] 上述技术虽然得到较为理想的结果,但仍然存在如下问题:
[0006] 1) 一次交互中C#以及C++各要生成一次的本地文件,进行系统磁盘文件的读写, 要消耗更多的系统资源,使得总的耗时更长,当频繁的读写操作时,可能会由于系统资源的 互斥而导致不可预知的错误;
[0007] 2)原图像信息保存成本地本件时,由于编译器或者开发语言的差异,可能会引起 一定的图像信息丢失,无法保证信息的完整传递。


【发明内容】

[0008] 本发明的目的是为了解决上述现有技术的缺陷,提供一种图像参数传递方法,该 方法提升了图像处理的整体效率,同时保障了图像数据的完整性与安全性。
[0009] 本发明的另一目的在于提供一种图像参数传递系统。
[0010] 本发明的目的可以通过采取如下技术方案达到:
[0011] 一种图像参数传递方法,其特征在于:所述方法通过基于C#开发的应用层和基于 C++开发的图像处理模块实现,包括以下步骤:
[0012] S1、在基于C#开发的应用层中,将原图像对象保存至内存块中,并获取原图像对 象的内存地址,然后将原图像对象的内存地址以及原图像的长度、宽度参数一起传给基于 C++的图像处理模块;
[0013] S2、在基于C++开发的图像处理模块中,根据获取的原图像对象的内存地址以及 原图像的长度、宽度参数,加载内存块中的原图像信息,并对原图像进行处理,然后将处理 后的图像信息保存至所述内存块中以覆盖原图像信息;
[0014] S3、在基于C#开发的应用层中,解除内存锁,重新加载内存地址中的图像对象,得 到处理后的图像信息,从而获取效果图。
[0015] 作为一种优选方案,步骤Sl所述将原图像对象保存至内存块中,并获取原图像对 象的内存地址,具体为:
[0016] 利用Bitmap类保存原图像对象,通过Bitmap类中的LockBits方法将原图像数据 以字节数组形式保存至内存块中;
[0017] 通过BitmapData类中的属性ScanO获取存放所述字节数组的内存地址。
[0018] 作为一种优选方案,步骤S2所述根据获取的原图像对象的内存地址以及原图像 的长度、宽度参数,加载内存块中的原图像信息,具体为:
[0019] 根据原图像的长度、宽度参数,新建OpenCv的Mat对象,该Mat对象用于保存原图 像信息;
[0020] 根据原图像对象的内存地址,通过BasisOperation类中的byte2mat方法加载内 存块中的原图像信息。
[0021] 作为一种优选方案,步骤S2所述对原图像进行处理通过BasisOperation类中的 doSomething方法实现相应的图像编辑操作。
[0022] 作为一种优选方案,步骤S2所述将处理后的图像信息保存至所述内存块中以覆 盖原图像信息,通过BasisOperation类中的mat2byte方法实现。
[0023] 本发明的另一目的可以通过采取如下技术方案达到:
[0024] 一种图像参数传递系统,其特征在于:所述系统通过基于C#开发的应用层和基于 C++开发的图像处理模块实现,其中:
[0025] 所述应用层包括:
[0026] 原图像对象存储单元,用于将原图像对象保存至内存块中;
[0027] 内存地址获取单元,用于获取原图像对象的内存地址;
[0028] 参数传输单元,用于将原图像对象的内存地址以及原图像的长度、宽度参数一起 传给基于C++的图像处理模块;
[0029] 效果图获取单元,用于解除内存锁,重新加载内存地址中的图像对象,得到处理后 的图像信息,从而获取效果图;
[0030] 所述图像处理模块包括:
[0031] 原图像加载单元,用于根据获取的原图像对象的内存地址以及原图像的长度、宽 度参数,加载内存块中的原图像信息;
[0032] 原图像处理单元,用于对原图像进行处理;
[0033] 处理结果保存单元,用于将处理后的图像信息保存至所述内存块中以覆盖原图像 信息。
[0034] 作为一种优选方案,所述原图像对象存储单元,具体为:
[0035] 用于利用Bitmap类保存原图像对象,通过Bitmap类中的LockBits方法将原图像 数据以字节数组形式保存至内存块中;
[0036] 所述内存地址获取单元,具体为:
[0037] 用于通过BitmapData类中的属性ScanO获取存放所述字节数组的内存地址。
[0038] 作为一种优选方案,所述原图像加载单元,具体为:
[0039] 用于根据原图像的长度、宽度参数,新建OpenCv的Mat对象,该Mat对象用于保存 原图像信息;以及根据原图像对象的内存地址,通过BasisOperation类中的byte2mat方法 加载内存块中的原图像信息。
[0040] 作为一种优选方案,所述原图像处理单元通过BasisOperation类中的 doSomething方法实现相应的图像编辑操作。
[0041] 作为一种优选方案,所述处理结果保存单元通过BasisOperation类中的 mat2byte方法实现。
[0042] 本发明相对于现有技术具有如下的有益效果:
[0043] 1、本发明方法及系统使用内存块作为信息载体,在基于C#开发的应用层中先将 原图像对象保存至内存块中,再将原图像对象的内存地址和原图像的长度、宽度参数这些 属于基本数据类型的数据传给基于C++的图像处理模块,在图像处理模块中加载内存块中 的原图像信息,并在处理后保存至所述内存块中,使应用层可以对处理后的图像信息进行 加载(需要解除内存锁),以获取效果图,保证在应用层与图像处理模块之间的参数传递 中,能够保障图像参数的完整性与安全性。
[0044] 2、本发明方法及系统的应用层与图像处理模块无需将图像信息保存成本地文件, 然后传递文件路径,而是利用内存块保存图像信息后直接传递图像数据,从而降低系统资 源消耗,以及提高图像处理的整体效率。

【专利附图】

【附图说明】
[0045] 图1为现有技术中图像处理模块与应用层的关系示意图。
[0046] 图2为现有技术中原图像信息的传递流程示意图。
[0047] 图3为现有技术中图像处理流程示意图。
[0048] 图4为本发明实施例1的图像参数传递方法流程示意图。
[0049] 图5为本发明实施例2的图像参数传递系统框图。

【具体实施方式】
[0050] 实施例1 :
[0051] 如图4所示,本实施例的图像参数传递方法以24位图为例,通过基于C#开发的应 用层和基于C++开发的图像处理模块实现,包括以下步骤:
[0052] S1、在基于C#开发的应用层中,将原图像对象(包括位图深度、长度、宽度、像素、 分辨率等基础信息)保存至内存块中,并获取原图像对象的内存地址,然后将原图像对象 的内存地址以及原图像的长度、宽度参数一起传给基于C++的图像处理模块;
[0053] 其中,所述将原图像对象存至内存块中,并获取原图像对象的内存地址,具体为:
[0054] a、利用Bitmap类保存原图像对象,通过Bitmap类中的LockBits方法将原图像数 据以字节数组形式保存至内存块中,代码片段如下:
[0055] Bitmap bitSource = new Bitmap ("原图像");
[0056] BitmapData bitData = bitSource. LockBits(new Rectangle(0,0,bitSource. Width,
[0057] bitSource. Height), ImageLockMode. Readffrite, bitSource. PixelFormat);
[0058] b、通过BitmapData类中的属性ScanO获取存放所述字节数组的内存地址,即 bitData. ScanO0
[0059] 所述将原图像对象的内存地址以及原图像的长度、宽度参数一起传给基于C++的 图像处理模块,接口形式如下:
[0060] public static extern void Function(IntPtr original, int width, int height);
[0061] S2、在基于C++开发的图像处理模块中,根据获取的原图像对象的内存地址以及 原图像的长度、宽度参数,以正确加载内存块中的原图像信息,并对原图像进行处理,然后 将处理后的图像信息保存至所述内存块中以覆盖原图像信息;
[0062] 其中,根据获取的原图像对象的内存地址以及原图像的长度、宽度参数,加载内存 块中的原图像信息,具体为:
[0063] a、根据原图像的长度、宽度参数,新建0penCv(0pen Source Computer Vision Library)的Mat对象,该Mat对象用于保存原图像信息;
[0064] b、根据原图像对象的内存地址,通过BasisOperation类中的byte2mat方法加载 内存块中的原图像信息。
[0065] 所述对原图像进行处理通过BasisOperation类中的doSomething方法实现相应 的图像编辑操作,如图像锐化,灰度图生成等功能;所述将处理后的图像信息(即图4中所 示的结果图像信息)保存至所述内存块中以覆盖原图像信息,通过BasisOperation类中的 mat2byte方法实现。
[0066] 本步骤S2的主要代码片段如下:
[0067]

【权利要求】
1. 一种图像参数传递方法,其特征在于:所述方法通过基于c#开发的应用层和基于 C++开发的图像处理模块实现,包括W下步骤: 51、 在基于C#开发的应用层中,将原图像对象保存至内存块中,并获取原图像对象的 内存地址,然后将原图像对象的内存地址W及原图像的长度、宽度参数一起传给基于C++ 的图像处理模块; 52、 在基于C++开发的图像处理模块中,根据获取的原图像对象的内存地址W及原图 像的长度、宽度参数,加载内存块中的原图像信息,并对原图像进行处理,然后将处理后的 图像信息保存至所述内存块中W覆盖原图像信息; 53、 在基于C#开发的应用层中,解除内存锁,重新加载内存地址中的图像对象,得到处 理后的图像信息,从而获取效果图。
2. 根据权利要求1所述的一种图像参数传递方法,其特征在于:步骤S1所述将原图像 对象保存至内存块中,并获取原图像对象的内存地址,具体为: 利用Bitmap类保存原图像对象,通过Bitmap类中的LockBits方法将原图像数据W字 节数组形式保存至内存块中; 通过Bitmap化ta类中的属性ScanO获取存放所述字节数组的内存地址。
3. 根据权利要求1或2所述的一种图像参数传递方法,其特征在于:步骤S2所述根据 获取的原图像对象的内存地址W及原图像的长度、宽度参数,加载内存块中的原图像信息, 具体为: 根据原图像的长度、宽度参数,新建化enCv的Mat对象,该Mat对象用于保存原图像信 息; 根据原图像对象的内存地址,通过Basis化eration类中的byte2mat方法加载内存块 中的原图像信息。
4. 根据权利要求1或2所述的一种图像参数传递方法,其特征在于:步骤S2所述对原 图像进行处理通过Basis化eration类中的doSomething方法实现相应的图像编辑操作。
5. 根据权利要求1或2所述的一种图像参数传递方法,其特征在于:步骤S2所述将 处理后的图像信息保存至所述内存块中W覆盖原图像信息,通过Basis化eration类中的 mat2byte方法实现。
6. -种图像参数传递系统,其特征在于:所述系统通过基于C#开发的应用层和基于 C++开发的图像处理模块实现,其中: 所述应用层包括: 原图像对象存储单元,用于将原图像对象保存至内存块中; 内存地址获取单元,用于获取原图像对象的内存地址; 参数传输单元,用于将原图像对象的内存地址W及原图像的长度、宽度参数一起传给 基于C++的图像处理模块; 效果图获取单元,用于解除内存锁,重新加载内存地址中的图像对象,得到处理后的图 像信息,从而获取效果图; 所述图像处理模块包括: 原图像加载单元,用于根据获取的原图像对象的内存地址W及原图像的长度、宽度参 数,加载内存块中的原图像信息; 原图像处理单元,用于对原图像进行处理; 处理结果保存单元,用于将处理后的图像信息保存至所述内存块中W覆盖原图像信 息。
7. 根据权利要求6所述的一种图像参数传递系统,其特征在于: 所述原图像对象存储单元,具体为: 用于利用Bitmap类保存原图像对象,通过Bitmap类中的LockBits方法将原图像数据 W字节数组形式保存至内存块中; 所述内存地址获取单元,具体为: 用于通过Bitmap化ta类中的属性ScanO获取存放所述字节数组的内存地址。
8. 根据权利要求6或7所述的一种图像参数传递系统,其特征在于:所述原图像加载 单元,具体为; 用于根据原图像的长度、宽度参数,新建化enCv的Mat对象,该Mat对象用于保存原图 像信息;W及根据原图像对象的内存地址,通过Basis化eration类中的byte2mat方法加载 内存块中的原图像信息。
9. 根据权利要求6或7所述的一种图像参数传递系统,其特征在于:所述原图像处理 单元通过Basis化eration类中的doSomething方法实现相应的图像编辑操作。
10. 根据权利要求6或7所述的一种图像参数传递系统,其特征在于:所述处理结果保 存单元通过BasisOperation类中的mat2byte方法实现。
【文档编号】G06F9/44GK104461585SQ201410854996
【公开日】2015年3月25日 申请日期:2014年12月31日 优先权日:2014年12月31日
【发明者】周俊君, 钟超军 申请人:广州商景网络科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1