Visual C++ 2005圖像編程之預(yù)備知識(shí)

            圖像處理過程中,有很多需要我們掌握或者注意的方方面面。這里我先簡單介紹一些比較基礎(chǔ)的、重要的知識(shí)。

            1、圖像處理系統(tǒng)框架

            一個(gè)基本的圖像處理系統(tǒng)包含有4個(gè)子系統(tǒng):圖像輸入系統(tǒng)、圖像輸出系統(tǒng)(顯示)、圖像存儲(chǔ)系統(tǒng)、圖像處理與分析系統(tǒng)。


          圖 1-1

            2、圖像的構(gòu)成

            圖像給我們的第一直觀感覺就是一些五顏六色的點(diǎn),在計(jì)算機(jī)語言中,這些點(diǎn)被稱為像素。正是這些像素匯集在一起就構(gòu)成了一副副美麗的圖片。那么如何把這種直觀的認(rèn)識(shí)和我們的計(jì)算機(jī)程序結(jié)合起來呢?如何在計(jì)算機(jī)中表示這些五顏六色的點(diǎn)?理解了這2個(gè)問題對(duì)我們后面的圖像處理有很多的幫助。圖像可以是矩陣,在計(jì)算機(jī)程序語言中,最好的表示方法就是數(shù)組,二維數(shù)組。把圖像每個(gè)像素點(diǎn)保存在數(shù)組的一個(gè)元素中。這一過程也稱為數(shù)字圖像采樣:把二維坐標(biāo)空間表示的圖像數(shù)字化。

            3、圖像處理的速度

            在圖像處理的過程中,有大量的數(shù)學(xué)計(jì)算和循環(huán)。如何處理好這些過程對(duì)圖像處理的速度有非常重要的影響。處理函數(shù)內(nèi)部變量的定義也需要注意:比如對(duì)常用的變量,可以在函數(shù)內(nèi)部用靜態(tài)或者全局變量保存,加快速度。但是,在大型的項(xiàng)目中,過多的靜態(tài)、局部變量會(huì)占用更多的內(nèi)存,同時(shí)影響程序的啟動(dòng)速度。所以這需要我們根據(jù)實(shí)際的情況進(jìn)行權(quán)衡。 數(shù)學(xué)計(jì)算時(shí)有浮點(diǎn)和整數(shù),浮點(diǎn)運(yùn)算非常精確;但是計(jì)算速度稍慢,整數(shù)運(yùn)算不會(huì)有誤差,計(jì)算速度快。所以在圖像處理過程中,盡量使用整數(shù)運(yùn)算,浮點(diǎn)運(yùn)算會(huì)因?yàn)橛?jì)算機(jī)的處理器表示方式有一定的誤差。

            在遍歷圖像的像素點(diǎn)時(shí),會(huì)有大量的循環(huán)過程,在循環(huán)過程中,盡量減少可能的代碼如變量定義,多用處理器支持更好的加法和移位運(yùn)算,減少乘法運(yùn)算。甚至,如果可能對(duì)一些常用函數(shù)可以采用匯編語言。

            4、貼圖的效率

            很多初學(xué)圖像編程的朋友幾乎都遇到貼圖閃爍的問題。我們最常用的方法就是雙緩沖貼圖。基本的代碼片斷:

          //pDC是最后圖像顯示的目標(biāo)窗口DC,pMemDC是內(nèi)存中的臨時(shí)DC

          CDC *pMemDC = CreateCompatibleDC(pDC);

          CBitmap Bitmap;

          //Width、Height是圖像最后顯示的目標(biāo)窗口高度和寬度

          Bitmap. CreateCompatibleBitmap(pDC, Width, Height);

          pMemDC->SelectObject(&Bitmap);

            然后我們就可以在pMemDC上進(jìn)行任何需要的畫圖操作,畫完后再貼到目標(biāo)窗口DC

          pDC->BitBlt(0, 0, Width, Height, pMemDC, 0, 0, SRCCOPY);

          pMemDC->DeleteDC();

            在有的時(shí)候我們需要進(jìn)行大量的貼圖,貼很多不同的小的圖片時(shí),需要注意SelectObject函數(shù)的調(diào)用,頻繁的調(diào)用這個(gè)函數(shù)選入不同的各種畫圖屬性會(huì)大大降低程序的速度。

            避免一些不必要的重畫,在完成自己的畫圖后,可以禁止系統(tǒng)的畫圖過程來避免閃爍:在WM_ERASEBKGND消息函數(shù)里直接返回TRUE,不再繼續(xù)調(diào)用基類的消息處理函數(shù)。需要重畫時(shí)進(jìn)行精確的更新,而不是盲目的將所有的內(nèi)容都重畫,如調(diào)用InvalidateRect來代替過渡的Invalidate調(diào)用過程。因?yàn)橛?jì)算Rect的時(shí)間比重畫那些不需要重畫的內(nèi)容所消耗的時(shí)間要少得多。

            在圖像處理過程中,還有許多方面需要我們特別注意,我會(huì)在后面的部分做進(jìn)一步的討論。

            5、顏色空間(Color Space)及轉(zhuǎn)換

            5.1、顏色空間介紹

            顏色空間就是把我們表示顏色的各個(gè)組件映射到笛卡兒的二維或者三維坐標(biāo)系中。簡單一點(diǎn)就是我們?nèi)绾斡脦讉€(gè)顏色組合來表示自然界所有的顏色。

           ?。?)、RGB顏色空間

            用R(Red)、G(Green)、B(Blue)三種顏色組合可以表示自然界所有的顏色,也稱為加色系統(tǒng)。因?yàn)槲覀儼裄GB范圍類的值相加可以產(chǎn)生任何的顏色。假設(shè)圖像沒有其他顏色都是黑色(RGB=0),然后我們往圖片上加上不同的RGB值顏色,就可以產(chǎn)生不同的色彩,下面的圖1-2表示了RGB系統(tǒng)是如何相加混合顏色的。


          圖 1-2 圖1-3

           ?。?)、CMY(CMYK)顏色空間

            CMY是用RGB的補(bǔ)色來表示色彩的。所謂的補(bǔ)色就是用白色減去RGB后得到的顏色。白色減去綠色是洋紅(Magenta),減去紅色是青色(Cyan),減去藍(lán)色是黃色(Yellow)。

            上面的圖1-3演示了CMY是如何相減混合顏色的。

            CMYK是CMY的擴(kuò)展,消除了CMY表示法中存在的理論和實(shí)際的差別。因?yàn)閱为?dú)使用CMY無法合成真正的黑色,所以為了避免這個(gè)問題,CMYK就直接在CMY的基礎(chǔ)添加了黑色的表示部分。

           ?。?)、HSV顏色空間

            色彩有三個(gè)屬性:色相、彩度與明度。

            1) 色相(Hue)又稱為色調(diào),是指色彩的相貌,或是區(qū)別色彩的名稱或色彩的種類,

            而色相與色彩明暗無關(guān)。

            2) 彩度(Chroma)指色彩的強(qiáng)弱,也稱色彩的飽和度(Saturation),色彩純與不純的分別。

            3) 明度(Value)是指色彩的明暗程度, 光度的高低, 要看其接近白色或灰色的程度而定,越接近白色明度越高,越接近灰色或黑色,其明度越低。

            HSV顏色空間就是用這三個(gè)屬性描述不同顏色的。當(dāng)Saturation為0時(shí),Hue不存在。圖像為灰度圖。明度的Value也可以用亮度表示(Brightness)。Hue為0時(shí)顏色是紅色。

            (4) HLS顏色空間

            HLS的基本意義和HSV相同,顏色的范圍值一樣:Hue(0-360),L(0-1),S(0-1),V(0-1)。

            只是在表示相同顏色時(shí)值不同了,Hue為0顏色是藍(lán)色。增加L的值相當(dāng)于向Hue添加白色的比例,減少就是增加黑色的比例。

            在現(xiàn)實(shí)生活中,還有其他很多的顏色空間如YIQ、YUV、YCrCb。我們這里不全部介紹,有興趣的朋友可參考相關(guān)的書籍。

            5.2 不同顏色空間的轉(zhuǎn)換

            圖像處理中進(jìn)行圖像調(diào)整時(shí),采用不同的顏色空間能更好的幫助我們實(shí)現(xiàn)對(duì)不同的顏色值進(jìn)行調(diào)整。比如調(diào)整色調(diào)和飽和度時(shí)就把圖像重RGB轉(zhuǎn)為HSV調(diào)整HS的值,然后轉(zhuǎn)回到RGB系統(tǒng)中。具體的轉(zhuǎn)換方法在后續(xù)的圖像處理庫中,我會(huì)提供一個(gè)完整的類。

          posted on 2008-04-26 14:40 Jarod.cn.LuLuLife 閱讀(148) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          我的知識(shí)Blog!

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章檔案

          Image

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 娄烦县| 恩施市| 河北区| 河西区| 察隅县| 余干县| 甘泉县| 财经| 凌海市| 鱼台县| 酒泉市| 新乐市| 如皋市| 英山县| 老河口市| 凉山| 阿拉尔市| 土默特右旗| 祁东县| 南乐县| 青浦区| 会宁县| 红安县| 溧水县| 林芝县| 长垣县| 乌什县| 乌恰县| 柘荣县| 晋宁县| 青冈县| 罗平县| 买车| 肇源县| 耒阳市| 安多县| 福海县| 斗六市| 花莲市| 棋牌| 乌恰县|