灰色rgb图片当做彩色图片显示,RGB值怎么取

彩色图像与灰度图像的转换 - NotValid - 博客园
随笔 - 29, 文章 - 1, 评论 - 1, 引用 - 0
彩色图像变成灰度格式,是要扔掉图像的颜色信息,用灰度表示图像的亮度信息。彩色图像每像素占3个字节,而变成灰度图像后,每个像素占一个字节,像素的灰度值是当前彩色图像像素的亮度,对于一个三分量的RGB的彩色图像像素,该店的亮度一般按以下公式计算:
I = 0.3B + 0.59G + 0.11R
另外,彩色图像没有颜色表,因此转换成灰度图像后,还要为灰度图像生成颜色表。我们只需要为灰度图像的颜色表分配256个长度的RGBQUAD结构体数组,并将颜色表中每一项的R,G,B分量设置成相同的值即可。
分配颜色表:
if(m_nColorTableLengthOut!=0)
m_lpColorTableOut=new RGBQUAD[m_nColorTableLengthOut];
for(int i=0; i&m_nColorTableLengthOi++)
m_lpColorTableOut[i].rgbBlue=i;
m_lpColorTableOut[i].rgbGreen=i;
m_lpColorTableOut[i].rgbRed=i;
m_lpColorTableOut[i].rgbReserved=0;
for(i=0;i&m_imgHi++)
for(j=0;j&m_imgWj++)
*(m_pImgDataOut+i*lineByteOut+j)=0.11**(m_pImgData+i*lineByteIn+j*pixelByteIn+0)
+0.59**(m_pImgData+i*lineByteIn+j*pixelByteIn+1)
+0.30**(m_pImgData+i*lineByteIn+j*pixelByteIn+2)+0.5;
灰度图像变彩色格式
灰度图像变彩色,需要将彩色图像中每个像素三个分量设置成相应的灰度值,即三个分量的值相等,对于颜色表,由于彩色图像每有颜色表,一次不需要为彩色图像分配颜色表缓冲区。因此灰度图像变彩色只是在格式上变成了彩色,而没有真正的颜色信息。
1、删除颜色表
for(i=0;i&m_imgHi++)
for(j=0;j&m_imgWj++)
//用像素灰度值为彩色格式中每个通道赋值,三个通道数值相等
for(k=0;k&3;k++)
*(m_pImgDataOut+i*lineByteOut+j*3+k)=*(m_pImgData+i*lineByteIn+j);sift 图像匹配-----在灰度图像上画线,不管你怎么设置RGB的值,线条颜色都只有黑白灰三种颜色
[问题点数:20分,结帖人u]
sift 图像匹配-----在灰度图像上画线,不管你怎么设置RGB的值,线条颜色都只有黑白灰三种颜色
[问题点数:20分,结帖人u]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年12月 VC/MFC大版内专家分月排行榜第二
2014年2月 VC/MFC大版内专家分月排行榜第三2013年11月 VC/MFC大版内专家分月排行榜第三
2013年12月 VC/MFC大版内专家分月排行榜第二
2014年2月 VC/MFC大版内专家分月排行榜第三2013年11月 VC/MFC大版内专家分月排行榜第三
2013年12月 VC/MFC大版内专家分月排行榜第二
2014年2月 VC/MFC大版内专家分月排行榜第三2013年11月 VC/MFC大版内专家分月排行榜第三
2013年12月 VC/MFC大版内专家分月排行榜第二
2014年2月 VC/MFC大版内专家分月排行榜第三2013年11月 VC/MFC大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。sift算法进行图像配准,将两张图片合成为一个图像,然后把匹配点连接起来,但是不管你怎么设置RGB的值,线条颜色都只有黑白灰三种颜色,为什么?
cvLine(&stacked,&pt1,&pt2,CV_RGB(255,0,0),1,8,0&);&&//stacked是两种图像合成的图像
回复讨论(解决方案)
是不是你的stacked图像本身就不是彩色图呀
是不是你的stacked图像本身就不是彩色图呀 这个有关系吗?
这个与原始影像有一定的关系
这个与原始影像有一定的关系 嗯嗯,有刚开始学机载sar影像,那一般要怎么处理原始影像呢、
以前看过,有点印象,貌似算法中间会取RGB的均值,也就是黑白图。。我以前做完了也都是黑色的,你追一下中间过程
这个与原始影像有一定的关系 嗯嗯,有刚开始学机载sar影像,那一般要怎么处理原始影像呢、
什么格式的数据?复数?
这个与原始影像有一定的关系 嗯嗯,有刚开始学机载sar影像,那一般要怎么处理原始影像呢、
什么格式的数据?复数? 老师截图给我,tif格式
你现在要做的是类似融合后匀色么
以前看过,有点印象,貌似算法中间会取RGB的均值,也就是黑白图。。我以前做完了也都是黑色的,你追一下中间过程 源代码是这样:cvLine(&stacked,&pt1,&pt2,get_rand_color(mm),1,8,0&);&我追加了这个函数数这样的:
CvScalar&get_rand_color(int&i)
if&(i%6&==&0)
color&=&CV_RGB(0,0,255);
else&if&(i%6&==&1)
color&=&CV_RGB(0,255,0);
else&if&(i%6&==&2)
color&=&CV_RGB(255,0,0);
else&if&(i%6&==&3)
color&=&CV_RGB(255,255,0);
else&if&(i%6&==&4)
color&=&CV_RGB(255,0,255);
color&=&CV_RGB(0,255,255);
这里设置RGB的值,按理说会颜色不只是黑白灰呢
你现在要做的是类似融合后匀色么
你现在要做的是类似融合后匀色么 不是的,那太高端了,做影像配准滴神马
你现在要做的是类似融合后匀色么
你现在要做的是类似融合后匀色么 融合没接触过呢,我主要想做两幅影像分别提取特征点,然后匹配,两幅图像合成一幅图,把两个特征点用线连接起来。
看上去你的lena图是灰度的,也就是那个变量stack是灰度图变量。。灰度图比彩色图少用了约1/3的存储空间,存不了彩色信息。除非你做什么伪彩色增强一类的。。。。所以你目前可以试试读一个彩图放进stack里,以观后效。
也就是说注意一下看看你的stack是不是用单通道方式读进来的。http://blog.csdn.net/thefutureisour/article/details/7613358
这看上去挺有意思的,我对opencv也是接触不久,可以按12L说的一试
看上去你的lena图是灰度的,也就是那个变量stack是灰度图变量。。灰度图比彩色图少用了约1/3的存储空间,存不了彩色信息。除非你做什么伪彩色增强一类的。。。。所以你目前可以试试读一个彩图放进stack里,以观后效。 嗯,我读入的lena是RGB真彩色的,是1通道读入,关于channels查了资料,整理一下OpenCV中文论坛里关于图像通道的问题,如下:
(1)图像的通道指的是什么?是不是灰度图的通道数为1,彩色图的通道为3?(zhuker)&
基本上,描述一个像素点,如果是灰度,那么只需要一个数值来描述它,就是单通道。&
如果一个像素点,有RGB三种颜色来描述它,就是三通道。(ollydbg23)&
(2)对于2通道和4通道如何看待?哪位帮忙解释一下?(feixue)&
我见过四通道的,两通道暂时没见过,估计只是编程的方便吧。windows的bmp有时候是一个四通道图像,R、G、B加上一个A通道,表示透明度。(eralvc)&
是的,最后这个,一般叫做alpha通道,表示透明度的。(ollydbg23)&
4通道通常为RGBA,在某些处理中可能会用到。&
2通道图像不常见,通常在程序处理中会用到,如傅里叶变换,可能会用到,一个通道为实数,一个通道为虚数,主要是编程方便。&
还有一种情况就是16位图像,本来是3通道,但是为了减少数据量,压缩为16位,刚好两个通道,常见格式有RGB555或RGB565,也就是说R占5位,G占5或6位,B占5位,也有RGBA5551格式。古老的格式,不用也罢。(Loren)&
主要是有些摄像头常采用一些比较“古怪”的格式,没办法。&
补充一种情况,目前常见的一些摄像头喜欢采用YUV2等格式,格式如下YUYV,在处理的时候可以用4通道或者2通道来处理。&
如原格式为:Y1UY2V,插值成为Y1UV,Y2UV&就成两个彩色点了。&
YCrCb也有类似压缩情况。(Loren)
详见:http://www./forum/viewtopic.php?f=1&t=4921&start=0&st=0&sk=t&sd=a&hilit=RGB
但是我还是不明白的是,图像是灰度图,在灰度图上画线,这个线应该不属于图像部分吧,也就是说线条的颜色可以是处理黑白其他的彩色呀??
这个就应该跟内存分布有关系了。你的图像在初期读的时候按照单通道读进来,那么内存就只给他分配了足够单通道用的内存空间,cvLine本身应该不会动stack的内存空间,而是先看stack是单通道还是3通道。若是单通道,就将后面的线条颜色变成单通道,在按照位置添加到图像上,也就是更新stack存储空间上的数据值;若是3通道,就按照彩色更新。。。。我觉得正常的编码思路应该这样的,我opencv环境都卸载掉了,也没法验证了,so,你如果不放心,跟到cvLine的代码里面再看一下,验证一下吧。
我好像回答问题又跑偏了。。。so&sorry,絮絮叨叨说这么多。。。
在灰度图上画线,这个线要更新灰度图像空间中的数据,最后变成灰度图上面的一堆像素点。最后生成的图还是灰度图像,线不能独立于图像而存在。
我好像回答问题又跑偏了。。。so&sorry,絮絮叨叨说这么多。。。
在灰度图上画线,这个线要更新灰度图像空间中的数据,最后变成灰度图上面的一堆像素点。最后生成的图还是灰度图像,线不能独立于图像而存在。 恩恩,stacked,是1通道的,哈哈,明白了不少,关于存储方面的知识得补补,感谢,哈哈,随便祝亲们圣诞快乐。openCV(54)
#include &opencv\cv.h&
#include &opencv\highgui.h&
#include &opencv\cxcore.h&
#include &stdlib.h&
#include &stdio.h&
int main(int argc, char* argv[])
//IplImage 控制参数 尾部加0 产生的就是一个灰度图像 默认值为1(表示彩色图)
//产生一个单通道图像
IplImage* src=cvLoadImage(&d:\\1.jpg&,0);
//创建3通道图像 (在三通道图像中也可以显示出灰色图像)
IplImage* dst=cvCreateImage(cvGetSize(src),8,3);
////绘制颜色变化直线
//for(int y=dst-&height-1;y&0;y--){
// cvSet2D(dst,y,dst-&height-y,cvScalar(255-y,255-y,255-y,0));
cvMerge(src,src,src,0,dst);
cvNamedWindow(&dst&);
cvShowImage(&dst&,dst);
cvNamedWindow(&src&);
cvShowImage(&src&,src);
cvWaitKey(0);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:491760次
积分:9323
积分:9323
排名:第1260名
原创:418篇
转载:266篇
评论:28条
(6)(1)(1)(3)(4)(3)(1)(8)(3)(12)(9)(10)(8)(21)(17)(23)(6)(11)(74)(57)(11)(20)(95)(51)(44)(111)(16)(20)(1)(5)(14)(18)关于彩色图像RGB分量的疑问.在 RGB 模式下,在 RGB 模式下,每种 RGB 成分都可使用从 0(黑色)到 255(白色)的值.例如,亮红色使用 R 值 255、G 值 0 和 B 值 0.当所有三种成分值相等时,产生灰色阴影.当所有成分的值均为 255 时,结果是纯白色;当该值为 0 时,结果是纯黑色.这个是RGB百度百科里面的一句话.对这个不能很好的理解.有以下几个疑问,希望得到您的详细解答.1:每种 RGB 成分都可使用从 0(黑色)到 255(白色)的值.比如R分量使用0-255的值,那么是否是从黑色到白色的逐渐渐变,中间是否是红色的渐变.如果是的话那么G分量是从黑色到白色的逐渐渐变,那么中间的数字是绿色的渐变吗?2:亮红色使用 R 值 255、G 值 0 和 B 值 0.这句话也不是很理解,红色使用的是这个值,刚才不是说了白色是255,黑色是0,那么这样的话岂不是黑色和白色,白色的叠加吗?这样怎么会是红色.如果真的是这样的话,那么R 0,G 255 B 0,应该是亮绿色,那么也是 白色 白色 黑色的叠加,这样怎么来具体区别呢,希望得到您的解答.
颜色分为无彩色和有彩色两种.无彩色指白色、黑色和各种不同程度的灰,无彩色图像也称灰度图像,使用[0,255]的值来表示其灰度值,0黑色,255白色,其间是各种深浅不同的灰色,整张图像的像素用一维数组表示即可.彩色指除去上述黑白灰以外的各种颜色,而RGB模型只是彩色模型的其中一种.RGB模型建立在笛卡尔坐标系统里(三维),其三个轴分别为红R,绿G,蓝B,模型空间是正方体,原点对应黑色,离原点最远的顶点对应白色.RGB的每个分量都使用[0,255]内的值.对于彩色图像,它的每个像素都有三个分量R、G、B,这三个值一同来表示一个像素,也就是说,彩色图像的像素要用三维数组来表示.比如R轴上,从[1,0,0]、[2,0,0]直到[255,0,0],是个渐变,都是红色,就是深红浅红的问题.在彩色图像中,黑色为RGB=[0,0,0],白色为RGB=[255,255,255].这样就可以理解亮红色为RGB=[255,0,0],亮绿色为RGB=[0,255,0]等等.彩色图像中是三种基色红绿蓝的叠加,不是所谓黑白的叠加.不知道有没有说清楚啦~
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 灰色rgb 的文章

 

随机推荐