【正文】
]。jhei。int stride=。int nWidth=*3。j。p=p+3。能夠?qū)⒁粋€圖像的各個像素讀入數(shù)組,接下來的處理就根據(jù)情況而定了,其原理和操作方法同VC中基本一致。對圖像進(jìn)行處理時,如何將圖像的各個像素值讀入數(shù)組中,如何將處理完畢的數(shù)組中的值寫回圖像中。在VB的教學(xué)過程中,也經(jīng)常有學(xué)生問到“怎樣把圖像轉(zhuǎn)換為灰度圖像”,“怎樣改變圖像的透明度”等問題。1 創(chuàng)建程序界面并設(shè)置相關(guān)屬性在窗體上放置兩個圖片框,給圖片框1設(shè)置Picture屬性,該圖片即為要處理的圖片,為了得到好的操作效果,本程序把處理后的目標(biāo)圖片寫(繪制)到Picture2上,放置9個命令按鈕。算法原理是按行和列依次讀取原圖像各點的顏色,變換位置后用原色寫回到相應(yīng)的位置。原代碼如下:Private Sub Command6_Click() For i=0 To Picture1. ScaleW idth For j=0 To Picture1. ScaleHeight col=Picture1. Point(,i j)′獲得某點的顏色值 r=colMod 256′提取紅色值賦給變量r g=col\256Mod 256′提取綠色值賦給變量g b=col\256 \256′提取藍(lán)色值賦給變量b pj=(r+g+b) /3′求出紅、綠、藍(lán)三元色的平均值 Picture2. PSet(,i j),RGB(p,j p,j pj)′用平均值做為三元色寫回位置 Next j Next iEnd Sub(3)圖像的膠片效果處理(即反色處理,得到和原圖像的膠卷相同的效果)依次求出各點的三元色值后,分別用它們的最大值255減去原值,然后作為三元色寫回去。只是處理速度明顯的要比現(xiàn)有的圖像處理軟件要慢。最后論述了如何在VC中編寫用作圖像處理的DLL以及在VB中調(diào)用這個DLL。所以在圖像處理中,一般選擇編譯后代碼執(zhí)行速度較快的VC來編程。用VB來編寫界面等不涉及大量運(yùn)算的程序,用VC編寫的DLL來負(fù)責(zé)數(shù)值運(yùn)算的部分。為了在VB中使用DLL中導(dǎo)出的例程,必須首先告訴VB如何正確地向例程傳遞參數(shù),因此需要使用Declare語句對DLL中的例程進(jìn)行聲明。Lib子句指明了包含所聲明過程的動態(tài)鏈接庫或代碼資源,該動態(tài)鏈接庫或代碼資源由libname指定。在這種方式中,實際上傳遞的并不是變量的值,而是指向這個變量的32位地址。在VB中調(diào)用C或C++編寫的DLL,需要知道兩者數(shù)據(jù)類型之間的對應(yīng)關(guān)系。2 VB中獲取位圖的像素信息和顯示位圖 在VB中,使用圖片框控件可以很容易地完成打開圖像文件,顯示圖像以及儲存圖像等操作。用GetBitmapBits獲取位圖的像素信息。 14 bytes bmType As Long 39。指明了每個掃描行的字節(jié)數(shù)(即以字節(jié)為單位的圖像寬度),這個值必須可被2整除 bmPlanes As Integer 39。End TypeGetBitmapBits和SetBitmapBits分別用于從位圖中獲取圖像中的像素信息和把像素信息返回給位圖。然后分別聲明以下三個API函數(shù)和BITMAP類型??偣惨嗌賯€Byte來存位圖ReDim ImgArray(totbytes)Result=GetBitmapBits(,totbytes,ImgArray(0)) 39。在上文中,已經(jīng)介紹了獲取和返還像素信息的方法,這里實際上就是把存有像素信息的數(shù)組傳送給DLL。注意在這個過程中VB和VC中的數(shù)據(jù)類型一定要對應(yīng)。接著在Globals項下添加一個新過程Myfunc,其定義如下:void stdcall Myfunc(BYTE*PicArray,BYTE*PicDest,long PicHeight,long Pic Width)其中PicArray是指向接受數(shù)組的指針,PicArray是指向輸出結(jié)果數(shù)組的指針,PicHeight和PicWidth分別是圖像的高度和寬度(以字節(jié)為單位)。所以只有強(qiáng)制VC按要求命名導(dǎo)出函數(shù)。4 結(jié)論按照本文所述方法,可以比較方便地編寫圖像處理的程序,不需要在代碼編寫中花費太多的精力,而且生成的程序執(zhí)行速度相比單純的VB編寫的程序執(zhí)行速度快了很多。位圖文件是可視編程環(huán)境中最基本的基礎(chǔ)圖像格式,因此,文章在分析了位圖的基本特點后,給出了在Win32 IDE環(huán)境下或者在Visual C++環(huán)境下實現(xiàn)這種要求的方法。BMP。關(guān)鍵詞:DIB。參考文獻(xiàn)1 李勇平,王雪梅, :希望電子出版社,2001:18~302 [美]David J C++技術(shù)內(nèi)幕(第四版).北京:清華大學(xué)出版社,1999:55~633 :東南大學(xué)出版社,1999:69再談可視編程環(huán)境下BMP文件的顯示和保存摘要:本文研究提出了Windows位圖文件讀取顯示和存盤的一種實用技術(shù)方法。同時在VB中對應(yīng)聲明Myfunc過程。寫完后在Build Project之前,。下面具體說明編寫和調(diào)用DLL的一般方法。那么可以用引用的方式把VB中數(shù)組的第一個元素的地址傳給VC編寫的DLL,在DLL中用一個指針來接收,這樣就達(dá)到了傳遞數(shù)組的目的。在這里加入對圖像像素數(shù)據(jù)進(jìn)行處理的程序Call SetBitmapBits(,totbytes,ImgArray(0)) 39。Dim Result As Long,totbytes As LongDim bmp As BITMAPDim ImgArray ()As ByteResult=GetObject(,Len(bmp),bmp)39。下面的程序說明了這三個API函數(shù)的用法。指明每個像素用幾位數(shù)據(jù)來表示(8,16,24,32) bmBits As Long 39。代表位圖以像素為單位的圖像寬度 bmHeight As Long 39。GetObject函數(shù)在VB中的聲明如下:[Public Private] Declare Function GetObjectLib gdi32 Alias GetObjectA (ByValhObject AsLong,Byval n Count As Logn,lpobject As Any)AsLonghObject是圖像對象(位圖、畫筆、刷子、字體、調(diào)色板等)的句柄,nCount是接受對應(yīng)圖像對象信息的結(jié)構(gòu)的字節(jié)數(shù),lpObject是指向接受對應(yīng)圖像對象信息的結(jié)構(gòu)的指針。在VB中快速地獲取Picture控件中顯示的圖像像素信息,或者將像素信息返回給位圖的方法是使用API函數(shù)。表1中列出了一些在VB參數(shù)聲明中常見的所用數(shù)據(jù)類型的對應(yīng)系統(tǒng)。這樣過程可以通過對地址中值的修改來達(dá)到修改參數(shù)原有值的目的。按值的方式傳遞時,傳遞的實際上是變量的一個副本,接受該參數(shù)的過程所作的改變只針對該副本,不會影響變量本身。如果需要這個DLL過程能為工程中所有的模塊訪問,那么要創(chuàng)建一個標(biāo)準(zhǔn)模塊,并在標(biāo)準(zhǔn)模塊中使用Public來聲明該DLL。1 在VB中調(diào)用動態(tài)鏈接庫中的函數(shù)或例程 動態(tài)鏈接庫是一種包含了一些函數(shù)和例程的可執(zhí)行文件,不過其本身不能單獨運(yùn)行,它只是為其他應(yīng)用程序提供服務(wù)。特別是在界面編程時,VB的所見即所得的特性能大大縮短編程的時間。以在圖像處理中常用的模板運(yùn)算為例,一個3*3的模板,完成一次操作每個像素要用9次乘法,8次加法。簡要介紹了VB中調(diào)用DLL的知識。原代碼如上:Private Sub Command8_Click() For i=0 To Picture1. ScaleW idth For j=0 To Picture1. ScaleHeight ′獲取原圖像某點的顏色 col1=Picture1. Point(,i j) r1=col1Mod 256 g1=col1 \256Mod 256 b1=col1 \256 \256 ′獲取繪制圖像處的底色 col2=Picture2. Point(,i j) r2=col2Mod 256 g2=col2 \256Mod 256 b2=col2 \256 \256 ′取其平均值寫回 r=(r1+r2) /2 g=(g1+g2) /2 b=(b1+b2) /2 Picture2. PSet(,i j),RGB(r, g, b) Next j Next iEnd Sub(5)馬賽克效果的實現(xiàn)將圖像加工成馬賽克效果是一種較常見的圖像處理技術(shù),要將一幅圖像加工成馬賽克效果需要依次讀取圖像上各點,及其該點周圍的顏色(范圍大小以馬賽克大小而定,本文以邊長為5個點的小方塊為例),將每點的色分解為三元色后求其平均值,然后把該色寫回到這一小正方形區(qū)域即可。Picture2. PSet(Picture1. ScaleHeight,j i), Picture1. Point(,i j)③單擊按鈕3時實現(xiàn)圖像旋轉(zhuǎn)180度,用下面代碼替代①中的循環(huán)體部分即可。圖1 操作界面2 算法原理和實現(xiàn)方法為了獲得較快的運(yùn)行速度,在窗體裝載時把窗體、Picture1和Picture2的坐標(biāo)度量單位改為實際像素(繪圖模式ScaleMode屬性值設(shè)置為3)。實際上使用VB的基本繪圖方法(主要是Point取色方法和Pset畫點方法),再結(jié)合恰當(dāng)?shù)乃惴纯蓪崿F(xiàn)這些功能,甚至編寫出類似PHOTOSHOP圖像處理軟件也是完全可以做到的。參考文獻(xiàn):[1] [J].電腦知識與技術(shù),2004,11(1):22~23.[2] 侯曉霞,技術(shù)內(nèi)幕[M].北京:清華大學(xué)出版社,2002.[3] 網(wǎng)冠科技. Visual C時尚編程百例[M].北京:機(jī)械工業(yè)用VB編寫圖像處理程序算法的實現(xiàn)摘 要 隨著計算機(jī)和多媒體技術(shù)的發(fā)展,圖像處理算法在編程中的地位顯得越來越重要,本文主要討論了利用VB提供的取色和畫點兩個關(guān)鍵方法,實現(xiàn)圖像處理的幾類常見方法。需注意的是,.NET中,顏色的順序是BGR,而不是RGB。}(bmData)。p[0]= (byte)(g[i*+j])。i。unsafe{byte * p=(byte *)(void*)Scan0。這時,應(yīng)當(dāng)直接對內(nèi)存中的圖像數(shù)據(jù)進(jìn)行寫操作。}(i,j).R將得到指定點的R顏色值。iwid。(RFType)。Bitmap clBitmap = (cloneRect, format)。.NET中提供了一些簡單、常用的處理功能,更多的處理功能需要我們自己去開發(fā)算法。如:(strFileName, )將把m中的圖像數(shù)據(jù)以bmp文件格式進(jìn)行保存。上例代碼運(yùn)行后,會彈出一個“保存”對話框,指定保存位置、文件名后,圖像文件就可以保存了?!D像的保存C.NET中,圖像讀入后,數(shù)據(jù)就保存在Bitmap類的實例中,因此在對圖像進(jìn)行完各種處理后,圖像的保存也就很簡單可以實現(xiàn)。//將打開的圖形文件數(shù)據(jù)讀入變量m中if(==())m=(Bitmap)(, false)。以下簡單示例了C.NET中,如何讀入、顯示一個bmp文件。另一方面,C語言吸收了C和Java語言的優(yōu)點,能夠開發(fā)出各種復(fù)雜、高效的算法。C、VC是最常用的工具,使用這些工具,可以對數(shù)字圖像進(jìn)行讀入、顯示、保存、格式轉(zhuǎn)換及其它各種復(fù)雜的處理。圖像處理Abstract:It is easy to read, display,and save the image with C.NET. The pixels can be read to an array and be written back to theimage when it is processed. Using this method, a concrete algorithm, and powerful GUI, it is easy tomake an image processing system.Key words:C。對圖像進(jìn)行處理時,可將圖像的各個像素值讀入數(shù)組中,處理完畢后的數(shù)組中的值寫回圖像中。濾波 ,一般比較注重新算法在本領(lǐng)域中的可行性分析,文中對圖像處理算法評價的基本方法進(jìn)行歸納,分析各種評價的差異和不足.1 現(xiàn)有算法評價概述1)直觀比較法 ,一般都是用不同的邊緣檢測算法獲得兩個圖像,[1]在研究細(xì)胞圖像的邊緣檢測的效果時就使用了原圖與腐蝕圖、膨脹圖等的對比說明.2)有效性分析法 有效性分析就是通過剖析算法的內(nèi)部結(jié)構(gòu),包括分析算法的調(diào)用過程,運(yùn)算類型,參數(shù)選取或估計,以及信息采集等方面,研究成果[2]分析中就使用了算法復(fù)雜度分析的方法,采用的指標(biāo)有高斯濾波、梯度計算、非極大值抑制產(chǎn)生高低閾值和邊緣跟蹤等.3)效率分析法 運(yùn)算速度是算法評價的主要指標(biāo)之一,一般都是將計算機(jī)的型號和配置等主要信息列出,[2]在分析算法效果時,不僅用了復(fù)雜性分析,也用了這個方法.4)模型分析法 就是利用標(biāo)準(zhǔn)圖像作為處理對象,、規(guī)則圖形、FPDB指紋圖像庫、Tulips1(嘴唇圖庫)和M2VTS(多模型人臉數(shù)據(jù)庫) 189片數(shù)字圖像(共39GB).Colour and Vision Research Labs制作了Colour amp。只要更改pb[3〕的值,:該功能實現(xiàn)程序效果如圖5所示,該圖像是由一個風(fēng)景圖像與人頭圖像之間的疊加生成的,這里的透明,若用VC++,需要同時使用背景圖像和前景圖像的數(shù)據(jù),按照圖像的透明運(yùn)算公式,進(jìn)行處理運(yùn)算[3],代碼復(fù)雜。b=Blxd+BZx(255一d).這里(RI,GI,Bl)為前景圖像數(shù)據(jù),(RZxGZxB2)為背景圖像數(shù)據(jù),d的取值范圍為0到255,255時,將顯示前景圖像。g二255一G。而C同時能夠?qū)崿F(xiàn)多種格式圖像的處理.12圖象亮度處理圖像亮度處理實際上就是