一種圖像參數(shù)傳遞方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種圖像參數(shù)傳遞方法及系統(tǒng),所述方法包括:在基于C#開發(fā)的應(yīng)用層中,將原圖像對象保存至內(nèi)存塊中,并獲取原圖像對象的內(nèi)存地址,然后將原圖像對象的內(nèi)存地址以及原圖像的長度、寬度參數(shù)一起傳給基于C++的圖像處理模塊;在基于C++開發(fā)的圖像處理模塊中,根據(jù)獲取的原圖像對象的內(nèi)存地址以及原圖像的長度、寬度參數(shù),加載內(nèi)存塊中的原圖像信息,并對原圖像進行處理,然后將處理后的圖像信息保存至所述內(nèi)存塊中以覆蓋原圖像信息;在基于C#開發(fā)的應(yīng)用層中,解除內(nèi)存鎖,重新加載內(nèi)存地址中的圖像對象,得到處理后的圖像信息,從而獲取效果圖。本發(fā)明方法及系統(tǒng)提升了圖像處理的整體效率,同時保障了圖像數(shù)據(jù)的完整性與安全性。
【專利說明】一種圖像參數(shù)傳遞方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種參數(shù)傳遞方法,尤其是一種圖像參數(shù)傳遞方法及系統(tǒng)。屬于圖像 處理領(lǐng)域。
【背景技術(shù)】
[0002] 在目前眾多的編程語言中,C++憑著更接近計算機系統(tǒng)底層的特點,以及其安全 性、簡潔性,在圖像處理上建立了較大的優(yōu)勢,還擁有著成熟的圖像處理類庫,如openCV,這 些優(yōu)點使得C++成為圖像處理的首選;而.NET的C#語言在微軟提供的強大的類庫以及開 發(fā)工具下,能快速的進行應(yīng)用層的開發(fā)。因此在項目中,由C#負(fù)責(zé)開發(fā)應(yīng)用界面,然后調(diào)用 C++開發(fā)的圖像處理模塊進行圖像處理操作,如圖1所示。
[0003] 在兩個編程語言中,C++常用CBitmap對象保存圖像信息,而C#是用Bitmap對象 保存圖像位圖信息,這兩種對象不是基本數(shù)據(jù)類型,所以不能直接傳遞;而字符信息是通用 的數(shù)據(jù)類型,基于這一點,C#先是用包含原圖像信息的Bitmap對象生成原圖像文件(本地 JPG文件),然后把生成的文件路徑通過字符信息傳入C++,而C++在接收到完整的字符信息 后,根據(jù)這個路徑去讀取相應(yīng)的原圖像文件,再把原圖像轉(zhuǎn)換成自己專屬的CBitmap對象, 這樣就完成了原圖像信息的傳遞,如圖2所示。
[0004] 在完成原圖像信息傳遞之后,C++開發(fā)的圖像處理模塊會根據(jù)內(nèi)容對原圖像進行 處理,然后將CBitmap對象保存為效果圖文件(本地JPG文件),再通過字符傳遞效果圖路 徑,C#獲得效果圖路徑后便可以通過路徑將文件轉(zhuǎn)換成Bitmap對象,完成整個圖像處理的 流程,如圖3所示。
[0005] 上述技術(shù)雖然得到較為理想的結(jié)果,但仍然存在如下問題:
[0006] 1) 一次交互中C#以及C++各要生成一次的本地文件,進行系統(tǒng)磁盤文件的讀寫, 要消耗更多的系統(tǒng)資源,使得總的耗時更長,當(dāng)頻繁的讀寫操作時,可能會由于系統(tǒng)資源的 互斥而導(dǎo)致不可預(yù)知的錯誤;
[0007] 2)原圖像信息保存成本地本件時,由于編譯器或者開發(fā)語言的差異,可能會引起 一定的圖像信息丟失,無法保證信息的完整傳遞。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明的目的是為了解決上述現(xiàn)有技術(shù)的缺陷,提供一種圖像參數(shù)傳遞方法,該 方法提升了圖像處理的整體效率,同時保障了圖像數(shù)據(jù)的完整性與安全性。
[0009] 本發(fā)明的另一目的在于提供一種圖像參數(shù)傳遞系統(tǒng)。
[0010] 本發(fā)明的目的可以通過采取如下技術(shù)方案達到:
[0011] 一種圖像參數(shù)傳遞方法,其特征在于:所述方法通過基于C#開發(fā)的應(yīng)用層和基于 C++開發(fā)的圖像處理模塊實現(xiàn),包括以下步驟:
[0012] S1、在基于C#開發(fā)的應(yīng)用層中,將原圖像對象保存至內(nèi)存塊中,并獲取原圖像對 象的內(nèi)存地址,然后將原圖像對象的內(nèi)存地址以及原圖像的長度、寬度參數(shù)一起傳給基于 C++的圖像處理模塊;
[0013] S2、在基于C++開發(fā)的圖像處理模塊中,根據(jù)獲取的原圖像對象的內(nèi)存地址以及 原圖像的長度、寬度參數(shù),加載內(nèi)存塊中的原圖像信息,并對原圖像進行處理,然后將處理 后的圖像信息保存至所述內(nèi)存塊中以覆蓋原圖像信息;
[0014] S3、在基于C#開發(fā)的應(yīng)用層中,解除內(nèi)存鎖,重新加載內(nèi)存地址中的圖像對象,得 到處理后的圖像信息,從而獲取效果圖。
[0015] 作為一種優(yōu)選方案,步驟Sl所述將原圖像對象保存至內(nèi)存塊中,并獲取原圖像對 象的內(nèi)存地址,具體為:
[0016] 利用Bitmap類保存原圖像對象,通過Bitmap類中的LockBits方法將原圖像數(shù)據(jù) 以字節(jié)數(shù)組形式保存至內(nèi)存塊中;
[0017] 通過BitmapData類中的屬性ScanO獲取存放所述字節(jié)數(shù)組的內(nèi)存地址。
[0018] 作為一種優(yōu)選方案,步驟S2所述根據(jù)獲取的原圖像對象的內(nèi)存地址以及原圖像 的長度、寬度參數(shù),加載內(nèi)存塊中的原圖像信息,具體為:
[0019] 根據(jù)原圖像的長度、寬度參數(shù),新建OpenCv的Mat對象,該Mat對象用于保存原圖 像信息;
[0020] 根據(jù)原圖像對象的內(nèi)存地址,通過BasisOperation類中的byte2mat方法加載內(nèi) 存塊中的原圖像信息。
[0021] 作為一種優(yōu)選方案,步驟S2所述對原圖像進行處理通過BasisOperation類中的 doSomething方法實現(xiàn)相應(yīng)的圖像編輯操作。
[0022] 作為一種優(yōu)選方案,步驟S2所述將處理后的圖像信息保存至所述內(nèi)存塊中以覆 蓋原圖像信息,通過BasisOperation類中的mat2byte方法實現(xiàn)。
[0023] 本發(fā)明的另一目的可以通過采取如下技術(shù)方案達到:
[0024] 一種圖像參數(shù)傳遞系統(tǒng),其特征在于:所述系統(tǒng)通過基于C#開發(fā)的應(yīng)用層和基于 C++開發(fā)的圖像處理模塊實現(xiàn),其中:
[0025] 所述應(yīng)用層包括:
[0026] 原圖像對象存儲單元,用于將原圖像對象保存至內(nèi)存塊中;
[0027] 內(nèi)存地址獲取單元,用于獲取原圖像對象的內(nèi)存地址;
[0028] 參數(shù)傳輸單元,用于將原圖像對象的內(nèi)存地址以及原圖像的長度、寬度參數(shù)一起 傳給基于C++的圖像處理模塊;
[0029] 效果圖獲取單元,用于解除內(nèi)存鎖,重新加載內(nèi)存地址中的圖像對象,得到處理后 的圖像信息,從而獲取效果圖;
[0030] 所述圖像處理模塊包括:
[0031] 原圖像加載單元,用于根據(jù)獲取的原圖像對象的內(nèi)存地址以及原圖像的長度、寬 度參數(shù),加載內(nèi)存塊中的原圖像信息;
[0032] 原圖像處理單元,用于對原圖像進行處理;
[0033] 處理結(jié)果保存單元,用于將處理后的圖像信息保存至所述內(nèi)存塊中以覆蓋原圖像 信息。
[0034] 作為一種優(yōu)選方案,所述原圖像對象存儲單元,具體為:
[0035] 用于利用Bitmap類保存原圖像對象,通過Bitmap類中的LockBits方法將原圖像 數(shù)據(jù)以字節(jié)數(shù)組形式保存至內(nèi)存塊中;
[0036] 所述內(nèi)存地址獲取單元,具體為:
[0037] 用于通過BitmapData類中的屬性ScanO獲取存放所述字節(jié)數(shù)組的內(nèi)存地址。
[0038] 作為一種優(yōu)選方案,所述原圖像加載單元,具體為:
[0039] 用于根據(jù)原圖像的長度、寬度參數(shù),新建OpenCv的Mat對象,該Mat對象用于保存 原圖像信息;以及根據(jù)原圖像對象的內(nèi)存地址,通過BasisOperation類中的byte2mat方法 加載內(nèi)存塊中的原圖像信息。
[0040] 作為一種優(yōu)選方案,所述原圖像處理單元通過BasisOperation類中的 doSomething方法實現(xiàn)相應(yīng)的圖像編輯操作。
[0041] 作為一種優(yōu)選方案,所述處理結(jié)果保存單元通過BasisOperation類中的 mat2byte方法實現(xiàn)。
[0042] 本發(fā)明相對于現(xiàn)有技術(shù)具有如下的有益效果:
[0043] 1、本發(fā)明方法及系統(tǒng)使用內(nèi)存塊作為信息載體,在基于C#開發(fā)的應(yīng)用層中先將 原圖像對象保存至內(nèi)存塊中,再將原圖像對象的內(nèi)存地址和原圖像的長度、寬度參數(shù)這些 屬于基本數(shù)據(jù)類型的數(shù)據(jù)傳給基于C++的圖像處理模塊,在圖像處理模塊中加載內(nèi)存塊中 的原圖像信息,并在處理后保存至所述內(nèi)存塊中,使應(yīng)用層可以對處理后的圖像信息進行 加載(需要解除內(nèi)存鎖),以獲取效果圖,保證在應(yīng)用層與圖像處理模塊之間的參數(shù)傳遞 中,能夠保障圖像參數(shù)的完整性與安全性。
[0044] 2、本發(fā)明方法及系統(tǒng)的應(yīng)用層與圖像處理模塊無需將圖像信息保存成本地文件, 然后傳遞文件路徑,而是利用內(nèi)存塊保存圖像信息后直接傳遞圖像數(shù)據(jù),從而降低系統(tǒng)資 源消耗,以及提高圖像處理的整體效率。
【專利附圖】
【附圖說明】
[0045] 圖1為現(xiàn)有技術(shù)中圖像處理模塊與應(yīng)用層的關(guān)系示意圖。
[0046] 圖2為現(xiàn)有技術(shù)中原圖像信息的傳遞流程示意圖。
[0047] 圖3為現(xiàn)有技術(shù)中圖像處理流程示意圖。
[0048] 圖4為本發(fā)明實施例1的圖像參數(shù)傳遞方法流程示意圖。
[0049] 圖5為本發(fā)明實施例2的圖像參數(shù)傳遞系統(tǒng)框圖。
【具體實施方式】
[0050] 實施例1 :
[0051] 如圖4所示,本實施例的圖像參數(shù)傳遞方法以24位圖為例,通過基于C#開發(fā)的應(yīng) 用層和基于C++開發(fā)的圖像處理模塊實現(xiàn),包括以下步驟:
[0052] S1、在基于C#開發(fā)的應(yīng)用層中,將原圖像對象(包括位圖深度、長度、寬度、像素、 分辨率等基礎(chǔ)信息)保存至內(nèi)存塊中,并獲取原圖像對象的內(nèi)存地址,然后將原圖像對象 的內(nèi)存地址以及原圖像的長度、寬度參數(shù)一起傳給基于C++的圖像處理模塊;
[0053] 其中,所述將原圖像對象存至內(nèi)存塊中,并獲取原圖像對象的內(nèi)存地址,具體為:
[0054] a、利用Bitmap類保存原圖像對象,通過Bitmap類中的LockBits方法將原圖像數(shù) 據(jù)以字節(jié)數(shù)組形式保存至內(nèi)存塊中,代碼片段如下:
[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獲取存放所述字節(jié)數(shù)組的內(nèi)存地址,即 bitData. ScanO0
[0059] 所述將原圖像對象的內(nèi)存地址以及原圖像的長度、寬度參數(shù)一起傳給基于C++的 圖像處理模塊,接口形式如下:
[0060] public static extern void Function(IntPtr original, int width, int height);
[0061] S2、在基于C++開發(fā)的圖像處理模塊中,根據(jù)獲取的原圖像對象的內(nèi)存地址以及 原圖像的長度、寬度參數(shù),以正確加載內(nèi)存塊中的原圖像信息,并對原圖像進行處理,然后 將處理后的圖像信息保存至所述內(nèi)存塊中以覆蓋原圖像信息;
[0062] 其中,根據(jù)獲取的原圖像對象的內(nèi)存地址以及原圖像的長度、寬度參數(shù),加載內(nèi)存 塊中的原圖像信息,具體為:
[0063] a、根據(jù)原圖像的長度、寬度參數(shù),新建0penCv(0pen Source Computer Vision Library)的Mat對象,該Mat對象用于保存原圖像信息;
[0064] b、根據(jù)原圖像對象的內(nèi)存地址,通過BasisOperation類中的byte2mat方法加載 內(nèi)存塊中的原圖像信息。
[0065] 所述對原圖像進行處理通過BasisOperation類中的doSomething方法實現(xiàn)相應(yīng) 的圖像編輯操作,如圖像銳化,灰度圖生成等功能;所述將處理后的圖像信息(即圖4中所 示的結(jié)果圖像信息)保存至所述內(nèi)存塊中以覆蓋原圖像信息,通過BasisOperation類中的 mat2byte方法實現(xiàn)。
[0066] 本步驟S2的主要代碼片段如下:
[0067]
【權(quán)利要求】
1. 一種圖像參數(shù)傳遞方法,其特征在于:所述方法通過基于c#開發(fā)的應(yīng)用層和基于 C++開發(fā)的圖像處理模塊實現(xiàn),包括W下步驟: 51、 在基于C#開發(fā)的應(yīng)用層中,將原圖像對象保存至內(nèi)存塊中,并獲取原圖像對象的 內(nèi)存地址,然后將原圖像對象的內(nèi)存地址W及原圖像的長度、寬度參數(shù)一起傳給基于C++ 的圖像處理模塊; 52、 在基于C++開發(fā)的圖像處理模塊中,根據(jù)獲取的原圖像對象的內(nèi)存地址W及原圖 像的長度、寬度參數(shù),加載內(nèi)存塊中的原圖像信息,并對原圖像進行處理,然后將處理后的 圖像信息保存至所述內(nèi)存塊中W覆蓋原圖像信息; 53、 在基于C#開發(fā)的應(yīng)用層中,解除內(nèi)存鎖,重新加載內(nèi)存地址中的圖像對象,得到處 理后的圖像信息,從而獲取效果圖。
2. 根據(jù)權(quán)利要求1所述的一種圖像參數(shù)傳遞方法,其特征在于:步驟S1所述將原圖像 對象保存至內(nèi)存塊中,并獲取原圖像對象的內(nèi)存地址,具體為: 利用Bitmap類保存原圖像對象,通過Bitmap類中的LockBits方法將原圖像數(shù)據(jù)W字 節(jié)數(shù)組形式保存至內(nèi)存塊中; 通過Bitmap化ta類中的屬性ScanO獲取存放所述字節(jié)數(shù)組的內(nèi)存地址。
3. 根據(jù)權(quán)利要求1或2所述的一種圖像參數(shù)傳遞方法,其特征在于:步驟S2所述根據(jù) 獲取的原圖像對象的內(nèi)存地址W及原圖像的長度、寬度參數(shù),加載內(nèi)存塊中的原圖像信息, 具體為: 根據(jù)原圖像的長度、寬度參數(shù),新建化enCv的Mat對象,該Mat對象用于保存原圖像信 息; 根據(jù)原圖像對象的內(nèi)存地址,通過Basis化eration類中的byte2mat方法加載內(nèi)存塊 中的原圖像信息。
4. 根據(jù)權(quán)利要求1或2所述的一種圖像參數(shù)傳遞方法,其特征在于:步驟S2所述對原 圖像進行處理通過Basis化eration類中的doSomething方法實現(xiàn)相應(yīng)的圖像編輯操作。
5. 根據(jù)權(quán)利要求1或2所述的一種圖像參數(shù)傳遞方法,其特征在于:步驟S2所述將 處理后的圖像信息保存至所述內(nèi)存塊中W覆蓋原圖像信息,通過Basis化eration類中的 mat2byte方法實現(xiàn)。
6. -種圖像參數(shù)傳遞系統(tǒng),其特征在于:所述系統(tǒng)通過基于C#開發(fā)的應(yīng)用層和基于 C++開發(fā)的圖像處理模塊實現(xiàn),其中: 所述應(yīng)用層包括: 原圖像對象存儲單元,用于將原圖像對象保存至內(nèi)存塊中; 內(nèi)存地址獲取單元,用于獲取原圖像對象的內(nèi)存地址; 參數(shù)傳輸單元,用于將原圖像對象的內(nèi)存地址W及原圖像的長度、寬度參數(shù)一起傳給 基于C++的圖像處理模塊; 效果圖獲取單元,用于解除內(nèi)存鎖,重新加載內(nèi)存地址中的圖像對象,得到處理后的圖 像信息,從而獲取效果圖; 所述圖像處理模塊包括: 原圖像加載單元,用于根據(jù)獲取的原圖像對象的內(nèi)存地址W及原圖像的長度、寬度參 數(shù),加載內(nèi)存塊中的原圖像信息; 原圖像處理單元,用于對原圖像進行處理; 處理結(jié)果保存單元,用于將處理后的圖像信息保存至所述內(nèi)存塊中W覆蓋原圖像信 息。
7. 根據(jù)權(quán)利要求6所述的一種圖像參數(shù)傳遞系統(tǒng),其特征在于: 所述原圖像對象存儲單元,具體為: 用于利用Bitmap類保存原圖像對象,通過Bitmap類中的LockBits方法將原圖像數(shù)據(jù) W字節(jié)數(shù)組形式保存至內(nèi)存塊中; 所述內(nèi)存地址獲取單元,具體為: 用于通過Bitmap化ta類中的屬性ScanO獲取存放所述字節(jié)數(shù)組的內(nèi)存地址。
8. 根據(jù)權(quán)利要求6或7所述的一種圖像參數(shù)傳遞系統(tǒng),其特征在于:所述原圖像加載 單元,具體為; 用于根據(jù)原圖像的長度、寬度參數(shù),新建化enCv的Mat對象,該Mat對象用于保存原圖 像信息;W及根據(jù)原圖像對象的內(nèi)存地址,通過Basis化eration類中的byte2mat方法加載 內(nèi)存塊中的原圖像信息。
9. 根據(jù)權(quán)利要求6或7所述的一種圖像參數(shù)傳遞系統(tǒng),其特征在于:所述原圖像處理 單元通過Basis化eration類中的doSomething方法實現(xiàn)相應(yīng)的圖像編輯操作。
10. 根據(jù)權(quán)利要求6或7所述的一種圖像參數(shù)傳遞系統(tǒng),其特征在于:所述處理結(jié)果保 存單元通過BasisOperation類中的mat2byte方法實現(xiàn)。
【文檔編號】G06F9/44GK104461585SQ201410854996
【公開日】2015年3月25日 申請日期:2014年12月31日 優(yōu)先權(quán)日:2014年12月31日
【發(fā)明者】周俊君, 鐘超軍 申請人:廣州商景網(wǎng)絡(luò)科技有限公司