青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

學(xué)海苦作舟,書山勤為徑

留下點(diǎn)回憶

常用鏈接

統(tǒng)計(jì)

積分與排名

Denoise

English study

Web技術(shù)

數(shù)據(jù)壓縮

一些連接

最新評(píng)論

如何將真彩色圖轉(zhuǎn)換為各種灰度圖

首先來看一下彩色圖和灰度圖的特點(diǎn)。

在計(jì)算機(jī)中使用最多的 RGB 彩色空間,分別對(duì)應(yīng)紅、綠、藍(lán)三種顏色;通過調(diào)配三個(gè)分量的比例來組成各種顏色。一般可以使用 1 2 4 8 16 24 32 位來存儲(chǔ)這三顏色,不過現(xiàn)在一個(gè)分量最大是用 8 位來表示,最大值是 255 ,對(duì)于 32 位的顏色,高 8 位是用來表示通明度的。彩色圖一般指 16 位以上的圖。灰度圖有一個(gè)特殊之處就是組成顏色的三個(gè)分量相等;而一般灰度圖是 8 位以下。

在彩色電視機(jī)系統(tǒng)中,通常使用一種叫 YUV 的色彩空間,其中 Y 表示亮度信號(hào);也就是這個(gè) YUV 空間解決了彩色電視機(jī)和黑白電視機(jī)的兼容問題。

對(duì)于人眼來說,亮度信號(hào)是最敏感的,如果將彩色圖像轉(zhuǎn)換為灰度圖像,僅僅需要轉(zhuǎn)換保存亮度信號(hào)就可以。

RGB YUV 空間的 Y 轉(zhuǎn)換公式為:

Y = 0.299R+0.587G+0.114B

?

WINDOWS 中,表示 16 位以上的圖和以下的圖有點(diǎn)不同; 16 位以下的圖使用一個(gè)調(diào)色板來表示選擇具體的顏色,調(diào)色板的每個(gè)單元是 4 個(gè)字節(jié),其中一個(gè)透明度;而具體的像素值存儲(chǔ)的是索引,分別是 1 2 4 8 位。 16 位以上的圖直接使用像素表示顏色。

?

那么如何將彩色圖轉(zhuǎn)換為灰度圖呢?

灰度圖中有調(diào)色板,首先需要確定調(diào)色板的具體顏色取值。我們前面提到了,灰度圖的三個(gè)分量相等。

當(dāng)轉(zhuǎn)換為 8 位的時(shí)候,調(diào)色板中有 256 個(gè)顏色,每個(gè)正好從 0 255 個(gè),三個(gè)分量都相等。

當(dāng)轉(zhuǎn)換為 4 位的時(shí)候,調(diào)色板中 16 個(gè)顏色,等間隔平分 255 個(gè)顏色值,三個(gè)分量都相等。

當(dāng)轉(zhuǎn)換為 2 位的時(shí)候,調(diào)色板中 4 個(gè)顏色,等間隔平分 255 個(gè)顏色,三個(gè)分量相等。

當(dāng)轉(zhuǎn)換為 1 位的時(shí)候,調(diào)色板中兩個(gè)顏色,是 0 255 ,表示黑和白。

?

將彩色轉(zhuǎn)換為灰度時(shí)候,按照公式計(jì)算出對(duì)應(yīng)的值,該值實(shí)際上是亮度的級(jí)別;亮度從 0 255 ;由于不同的位有不同的亮度級(jí)別,所以 Y 的具體取值如下:

?????? Y = Y/ (1<<(8- 轉(zhuǎn)換的位數(shù) ));

?

最后一點(diǎn)需要注意,得到 Y 值存放方式是不同的;分別用對(duì)應(yīng)的位數(shù)來存儲(chǔ)對(duì)應(yīng)的 Y 值。

?

這里是代碼片段:

計(jì)算調(diào)色板和 Y 的值代碼。

??1 LPBYTE??CColorDeepChange::ConvertTo8Gray(LPBYTE?lpByte,?
??2
??3 ????????????????????????????????????????? int ?width,?
??4
??5 ????????????????????????????????????????? int ?height,?
??6
??7 ?????????????????????????????????????????DWORD? & dwGraySize,?
??8
??9 ????????????????????????????????????????? int ?nToBit)?
?10
?11 {?
?12
?13 ????DWORD???nRowLen? = ???TS_4BYTESALIGN(width * nToBit);?
?14
?15 ????DWORD???nColorTableSize? = ?(( 1 << nToBit) * sizeof (RGBQUAD));?
?16
?17 ????DWORD???nColorNum? = ? 1 << nToBit;?
?18
?19 ????dwGraySize? = ????nRowLen * height + nColorTableSize;?
?20
?21 ????LPBYTE??lpNewImgBuf? = ?NULL;?
?22
?23 ????BYTE????r,g,b;?
?24
?25 ???? float ???y;?
?26
?27 ????
?28
?29 ????lpNewImgBuf? = ? new ?BYTE[dwGraySize];?
?30
?31 ????LPBYTE??lpPixels? = ?(LPBYTE)(lpNewImgBuf? + nColorTableSize);?
?32
?33 ????LPRGBQUAD???lpvColorTable = (LPRGBQUAD)lpNewImgBuf;?
?34
?35 ????memset(lpNewImgBuf, 0 ,dwGraySize);?
?36
?37 ??
?38
?39 ???? for ( int ?i? = ? 0 ;i < nColorNum;i ++ )?
?40
?41 ???? {?
?42
?43 ???????? if (nToBit? == ? 8 )?
?44
?45 ???????? {?
?46
?47 ????????????( * (lpvColorTable)).rgbBlue = (BYTE)i;?
?48
?49 ????????????( * (lpvColorTable)).rgbGreen = (BYTE)i;?
?50
?51 ????????????( * (lpvColorTable)).rgbRed = (BYTE)i;?
?52
?53 ????????}
?
?54
?55 ???????? else ? if (nToBit? == ? 4 )?
?56
?57 ???????? {?
?58
?59 ????????????( * (lpvColorTable)).rgbBlue = (BYTE)(i << ( 8 - nToBit)) + i;?
?60
?61 ????????????( * (lpvColorTable)).rgbGreen = (BYTE)(i << ( 8 - nToBit)) + i;?
?62
?63 ????????????( * (lpvColorTable)).rgbRed = (BYTE)(i << ( 8 - nToBit)) + i;?
?64
?65 ????????}
?
?66
?67 ???????? else ? if (nToBit? == ? 2 )?
?68
?69 ???????? {?
?70
?71 ????????????( * (lpvColorTable)).rgbBlue = (BYTE)( 255 / 3 ) * i;?
?72
?73 ????????????( * (lpvColorTable)).rgbGreen = (BYTE)( 255 / 3 ) * i;?
?74
?75 ????????????( * (lpvColorTable)).rgbRed = (BYTE)( 255 / 3 ) * i;?
?76
?77 ????????}
?
?78
?79 ???????? else ? if (nToBit? == ? 1 )?
?80
?81 ???????? {?
?82
?83 ????????????( * (lpvColorTable)).rgbBlue = (BYTE) 255 * i;?
?84
?85 ????????????( * (lpvColorTable)).rgbGreen = (BYTE) 255 * i;?
?86
?87 ????????????( * (lpvColorTable)).rgbRed = (BYTE) 255 * i;?
?88
?89 ????????}
?
?90
?91 ??
?92
?93 ????????( * (lpvColorTable)).rgbReserved = 0 ;?
?94
?95 ????????lpvColorTable ++ ;?
?96
?97 ????}
?
?98
?99 ??
100
101 ????LPBYTE??lpOldImage? = ?lpByte;?
102
103 ????LPBYTE??lpTempPixel? = ?lpPixels;?
104
105 ???? int ?loops?? = ? 0 ;?
106
107 ???? int ?nStop? = ? 0 ;?
108
109 ???? for ( long ??h = 0 ;h < height;h ++ )?
110
111 ???? {?
112
113 ???????? for ( long ??w = 0 ;w < width;w ++ )?
114
115 ???????? {???
116
117 ????????????b = (unsigned??? char )( * lpOldImage ++ );?
118
119 ????????????g = (unsigned??? char )( * lpOldImage ++ );?
120
121 ????????????r = (unsigned??? char )( * lpOldImage ++ );?
122
123 ??
124
125 ????????????y = ( float )(r * 0.299 + g * 0.587 + b * 0.114 )?;?
126
127 ????????????BYTE?bVal? = ?(BYTE)y >> ( 8 - nToBit);?
128
129 ????????????SetPixelValueByBits(lpTempPixel,nToBit,loops,(BYTE)bVal);?
130
131 ???????????? // ErrorDiffuse(lpPixels,nToBit,loops,((int)y)?-?(bVal<<(8-nToBit)),?
132
133 ???????????? // ??????????????????????w,h,nRowLen,dwGraySize-nColorTableSize);?
134
135 ????????}
???
136
137 ????}
?
138
139 ??
140
141 ???? return ?lpNewImgBuf;?
142
143 }
?
144
145

下面是設(shè)置像素值的代碼:

??1 void ???CColorDeepChange::SetPixelValueByBits(LPBYTE? & lpByte, int ?nBits, int ? & loops,BYTE?value)?
??2
??3 {?
??4
??5 ???? switch (nBits)?
??6
??7 ???? {?
??8
??9 ???? case ? 8 :?
?10
?11 ??????? * (lpByte ++ ) = value;?
?12
?13 ??????? break ;?
?14
?15 ???? case ? 4 :?
?16
?17 ??????? {?
?18
?19 ??????????? if (loops)?
?20
?21 ??????????? {?
?22
?23 ??????????????loops? = ? 0 ;?
?24
?25 ??????????????BYTE?bVal? = ?( * lpByte) & 0xF0 ;?
?26
?27 ??????????????value? &= ? 0x0F ;?
?28
?29 ??????????????bVal? = (bVal >> 4 ) + value;?
?30
?31 ??????????????? if (bVal > 0x0F )?bVal? = ? 0x0F ;?
?32
?33 ??????????????( * lpByte)? <<= ? 4 ;?
?34
?35 ??????????????( * lpByte)? += ?bVal;?
?36
?37 ??????????????lpByte ++ ;?
?38
?39 ???????????}
?
?40
?41 ??????????? else ?
?42
?43 ??????????? {?
?44
?45 ??????????????value? &= ? 0x0F ;?
?46
?47 ??????????????( * lpByte)? += ?value;?
?48
?49 ?????????????? if (( * lpByte) > 0x0F )?( * lpByte)? = ? 0x0F ;?
?50
?51 ??????????????loops? = 1 ;?
?52
?53 ???????????}
?
?54
?55 ???????}
?
?56
?57 ??????? break ;?
?58
?59 ???? case ? 2 :?
?60
?61 ??????? {?
?62
?63 ???????????value? &= ? 0x03 ;?
?64
?65 ???????????( * lpByte)? += ?value;?
?66
?67 ??????????? if (loops? != ? 3 )?
?68
?69 ??????????? {?
?70
?71 ??????????????( * lpByte)? <<= ? 2 ;?
?72
?73 ??????????????loops ++ ;?
?74
?75 ???????????}
?
?76
?77 ??????????? else ?
?78
?79 ??????????? {?
?80
?81 ??????????????loops? = 0 ;?
?82
?83 ??????????????lpByte ++ ;?
?84
?85 ???????????}
?
?86
?87 ???????}
?
?88
?89 ??????? break ;?
?90
?91 ???? case ? 1 :?
?92
?93 ??????? {?
?94
?95 ???????????value? &= ? 0x01 ;?
?96
?97 ???????????( * lpByte)? += ?value;?
?98
?99 ??????????? if (loops? != ? 7 )?
100
101 ??????????? {?
102
103 ??????????????( * lpByte)? <<= ? 1 ;?
104
105 ??????????????loops ++ ;?
106
107 ???????????}
?
108
109 ??????????? else ?
110
111 ??????????? {?
112
113 ??????????????loops? = 0 ;?
114
115 ??????????????lpByte ++ ;?
116
117 ???????????}
?
118
119 ???????}
?
120
121 ??????? break ;?
122
123 ????}
?
124
125 }
?
126

?

有一點(diǎn)需要說明的:

在計(jì)算 Y 值的時(shí)候,使用的整數(shù)除法,這是有誤差的,為了消除誤差,需要采用誤差擴(kuò)散的算法,也就是將該誤差值向其鄰近的想素點(diǎn)擴(kuò)散,當(dāng)然按照一定的比例來分配;例如:整除之后,余數(shù)是 5 ,采用 3/2/3 的策略,就是,右邊像素和正下面的像素各占 3/8 ,而右下角的像素占 2/8 。在這方面我發(fā)現(xiàn) ACDSEE 做的很好,其圖像的漸進(jìn)做的很好。

源碼下載:ImageConvert.zip

posted on 2006-07-27 21:00 笨笨 閱讀(13990) 評(píng)論(3)  編輯 收藏 引用

評(píng)論

# re: 如何將真彩色圖轉(zhuǎn)換為各種灰度圖 2010-04-23 09:38 icegrape

詢問一下:
對(duì)于一幅數(shù)字圖像,每個(gè)像素所包含的信息是什么?
顯示器顯示圖像時(shí),加在顯像管或者液晶屏上的數(shù)據(jù)信號(hào)是電壓信號(hào)嗎?這個(gè)信號(hào)如何轉(zhuǎn)化為帶有色彩和亮度的點(diǎn)?  回復(fù)  更多評(píng)論   

# re: 如何將真彩色圖轉(zhuǎn)換為各種灰度圖 2011-03-18 19:40 Dom

Very good, and thank you for this paper.  回復(fù)  更多評(píng)論   

# re: 如何將真彩色圖轉(zhuǎn)換為各種灰度圖 2012-03-20 15:58

DWORD nRowLen = TS_4BYTESALIGN(width * nToBit);
什么意思?TS_4BYTESALIGN這個(gè)函數(shù)什么意思?  回復(fù)  更多評(píng)論   


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩精品三区| 91久久午夜| 欧美日韩日韩| 久久综合图片| 在线日本欧美| 欧美在线精品免播放器视频| 日韩视频免费| 久久久久久电影| 欧美视频在线看| 老鸭窝91久久精品色噜噜导演| 欧美不卡激情三级在线观看| 国产精品免费在线| 久久久中精品2020中文| 午夜一区二区三视频在线观看| 久久久久国产精品午夜一区| 国产精品福利网站| 欧美aⅴ一区二区三区视频| 国产精品亚洲一区二区三区在线| 欧美成人免费视频| 亚洲电影在线免费观看| 午夜在线成人av| 亚洲电影免费在线| 久久精品91久久香蕉加勒比| 精品动漫3d一区二区三区免费| 国产一区二区三区自拍| 国产精品一区在线观看你懂的| 国产精品久久久999| 欧美中文在线免费| 亚洲日本中文字幕免费在线不卡| 小黄鸭精品aⅴ导航网站入口| 这里只有精品在线播放| 欧美日韩精品久久| 久久久91精品国产一区二区三区| 久久色在线观看| 亚洲影视中文字幕| 国产精品va在线播放| 久久综合中文字幕| 91久久精品一区| av成人免费在线观看| 欧美成人午夜激情在线| 亚洲午夜一二三区视频| 亚洲国产一区二区三区高清| 亚洲电影第三页| 国产一区二区三区黄| 久久在线视频| 亚洲在线成人| 亚洲免费观看高清完整版在线观看| 老妇喷水一区二区三区| 99视频精品全国免费| 91久久久亚洲精品| 一片黄亚洲嫩模| 亚洲国产精品一区二区第一页| 蜜乳av另类精品一区二区| 噜噜噜噜噜久久久久久91| 一区在线播放视频| 免费视频一区二区三区在线观看| 亚洲国产精品传媒在线观看| 欧美日韩免费一区| 国产精品theporn| 欧美午夜电影在线观看| 国产精品久久久久9999| 国产精品成人免费视频| 国产最新精品精品你懂的| 亚洲国产精品一区| 亚洲影院在线| 久久蜜桃精品| 日韩一二三在线视频播| 欧美一级播放| 猫咪成人在线观看| 国产精品vip| 精品成人在线| 羞羞色国产精品| 欧美韩国日本综合| 久久精品二区| 国产精品天美传媒入口| 亚洲欧美电影在线观看| 一区二区三区不卡视频在线观看| 亚洲毛片一区二区| 一区二区三区欧美在线| 欧美在线观看视频一区二区| 欧美一区二区三区视频免费播放| 日韩亚洲精品视频| 欧美成人黄色小视频| 亚洲人成网站在线播| 亚洲欧美一区二区激情| 91久久亚洲| 国产亚洲精品v| 欧美理论在线播放| 久久精品夜色噜噜亚洲aⅴ | 男人插女人欧美| 一本色道久久| 老色鬼精品视频在线观看播放| 国产日韩1区| 香蕉久久精品日日躁夜夜躁| 欧美一区二区三区在线视频 | 欧美影院午夜播放| 激情偷拍久久| 欧美在线精品一区| 91久久久久久| 欧美成人精品在线观看| 欧美亚洲免费电影| 亚洲一区网站| 亚洲欧洲综合另类| 欧美激情一二区| 欧美va亚洲va日韩∨a综合色| 久久久91精品国产| 久久精品动漫| 久久狠狠久久综合桃花| 香蕉av777xxx色综合一区| 亚洲香蕉视频| 亚洲影音一区| 先锋影音网一区二区| 欧美一区二区高清在线观看| 亚洲欧美日韩一区二区三区在线观看| 99日韩精品| 一区二区三区欧美亚洲| 这里只有精品视频| 亚洲在线免费观看| 亚洲欧美日韩国产精品| 性欧美videos另类喷潮| 欧美一区二区三区视频| 久久国产精品黑丝| 久久午夜电影| 欧美大色视频| 亚洲国产日韩欧美| 日韩一区二区免费看| 亚洲视频你懂的| 亚洲欧美清纯在线制服| 亚洲欧美日韩直播| 午夜天堂精品久久久久| 久久精品国产综合精品| 免费成人高清视频| 欧美日韩午夜视频在线观看| 欧美日韩成人在线观看| 国产精品美女久久久久aⅴ国产馆| 国产乱人伦精品一区二区| 国产区亚洲区欧美区| 亚洲国产免费看| 一区二区三区欧美视频| 久久国产66| 亚洲国产精品精华液网站| 亚洲视频免费看| 久久久五月天| 欧美视频在线观看视频极品| 国产亚洲激情在线| 亚洲精品美女在线| 午夜欧美精品| 欧美激情一区二区三区高清视频| 99视频一区| 久久久久久欧美| 欧美日韩一区二区视频在线观看| 久久久精品动漫| 欧美aaa级| 夜夜嗨av一区二区三区| 欧美午夜电影一区| 亚洲五月婷婷| 久久综合99re88久久爱| 99re在线精品| 欧美日韩伦理在线| 欧美一区在线直播| 欧美寡妇偷汉性猛交| 一区二区三区国产在线观看| 国产精品一区久久久久| 久久综合色婷婷| aⅴ色国产欧美| 欧美成ee人免费视频| 亚洲精品乱码| 国产一区清纯| 欧美午夜精品久久久久久浪潮| 欧美一级成年大片在线观看| 亚洲成色www8888| 亚洲无线观看| 中文网丁香综合网| 99亚洲一区二区| 国产无一区二区| 欧美日韩国产在线播放| 久久亚洲欧洲| 欧美性猛交xxxx乱大交蜜桃 | 国产亚洲欧美日韩日本| 亚洲国产高清视频| 久久黄色小说| 亚洲一区二区三区三| 欧美激情亚洲一区| 18成人免费观看视频| 久久欧美肥婆一二区| 午夜精品久久久久久久久久久| 欧美日韩一区二区三区免费| 最新亚洲视频| 免费在线成人av| 久久久99爱| 黄色成人在线网址| 久久九九热re6这里有精品| 亚洲女同性videos| 国产精品久久久久影院色老大 | 久久一区欧美| 一区精品在线| 免费日韩成人| 久久网站热最新地址| 在线观看91精品国产入口| 老司机一区二区|