将RGB转换为灰度/灰度

将RGB转换为灰度/灰度

当从RGB转换为灰度时,应该使用R、G和B通道的特定权重。这些重量是:0.2989,0.5870,0.1140。

据说,造成这种情况的原因是人类对这三种颜色的不同感知/感受。有时还会说,这些是用来计算NTSC信号的值。

然而,我并没有在网上找到一个很好的参考资料。这些价值观的来源是什么?

另见前几个问题:这里这里.


忽然笑
浏览 889回答 3
3回答

元芳怎么了

以下是c中的一些代码,用于将RGB转换为灰度。RGB对灰度转换的实际权重为0.3R+0.6g+0.11B。这些重量并不是绝对重要的,所以你可以和它们一起玩。我做了0.25R+0.5g+0.25B。它会产生一个稍微暗一些的图像。注意:以下代码采用xRGB 32位像素格式unsigned&nbsp;int&nbsp;*pntrBWImage=(unsigned&nbsp;int*)..data&nbsp;pointer..;&nbsp;&nbsp;//assumes&nbsp;4*width*height&nbsp;bytes&nbsp;with&nbsp;32&nbsp;bits&nbsp;i.e.&nbsp;4&nbsp;bytes&nbsp;per&nbsp;pixel unsigned&nbsp;int&nbsp;fourBytes; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;r,g,b; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;index=0;index<width*height;index++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fourBytes=pntrBWImage[index];//caches&nbsp;4&nbsp;bytes&nbsp;at&nbsp;a&nbsp;time &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r=(fourBytes>>16); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;g=(fourBytes>>8); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b=fourBytes; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I_Out[index]&nbsp;=&nbsp;(r&nbsp;>>2)+&nbsp;(g>>1)&nbsp;+&nbsp;(b>>2);&nbsp;//This&nbsp;runs&nbsp;in&nbsp;0.00065s&nbsp;on&nbsp;my&nbsp;pc&nbsp;and&nbsp;produces&nbsp;slightly&nbsp;darker&nbsp;results &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//I_Out[index]=((unsigned&nbsp;int)(r+g+b))/3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//This&nbsp;runs&nbsp;in&nbsp;0.0011s&nbsp;on&nbsp;my&nbsp;pc&nbsp;and&nbsp;produces&nbsp;a&nbsp;pure&nbsp;average &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP