灰度图像转化为伪彩色图像 VC

乐天的猪 2011-01-20 06:29:09
256的灰度图像,如何转化为RGB的伪彩色图像呢? 期待高人回答。
...全文
476 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengbingchun 2011-01-24
  • 打赏
  • 举报
回复
用opencv的cvCvtColor函数
xiuxianshen 2011-01-24
  • 打赏
  • 举报
回复
Google些伪彩的算法,这个应该是些比较基础的,没有太大的难度,实在写不出来也可以去看看LS说的cvCvtColor的源码
renxu350 2011-01-22
  • 打赏
  • 举报
回复
处理完之后可以保存成BMP格式文件
renxu350 2011-01-22
  • 打赏
  • 举报
回复
放大4倍的原因是RGB颜色表对应的灰度值是255被4等分后的灰度值
renxu350 2011-01-22
  • 打赏
  • 举报
回复
比如:

灰度值 = 000 对应 ARGB = 0x00000000
灰度值 = 063 对应 ARGB = 0x00FF0000
灰度值 = 127 对应 ARGB = 0x0000FF00
灰度值 = 191 对应 ARGB = 0x000000FF
灰度值 = 255 对应 ARGB = 0x00FFFFFF

在这些灰度值之间的灰度值,使用线性过渡插值得到对应的RGB值,
示范一下,比如 000 ~ 063 之间:

BYTE gGrayScale[600][800];//由原图片得到
DWORD gARGB[600][800];

//外面套一个600X800(图片尺寸)的for循环,不写了,LZ应该懂的
int i = 600;
int j = 800;
//循环里面是这样的,采用逐级判断:
if(gGrayScale <= 63)
{
gARGB[i][j] = ((gGrayScale[i][j]) * 4) << 16;//先放大4倍,然后左移16位
}
if(gGrayScale <= 127)
{
gARGB[i][j] = ((gGrayScale[i][j]) * 4) << 8;//先放大4倍,然后左移8位
}
if(gGrayScale <= 191)
{
gARGB[i][j] = ((gGrayScale[i][j]) * 4);//放大4倍,不需要移位
}
//最后的值是在 192 - 255 之间
gARGB[i][j] = (((gGrayScale[i][j]) * 4) << 16) + (((gGrayScale[i][j]) * 4) << 8) + ((gGrayScale[i][j]) * 4);

关于图片的操作有 CreateDIBitmap() 等等函数,具体请查阅MSDN
乐天的猪 2011-01-22
  • 打赏
  • 举报
回复
这个我也考虑到了,但就是对图片的具体操作不知道如何进行,原本一个字节,现在三个字节,如何存储,如何显示呢?
renxu350 2011-01-20
  • 打赏
  • 举报
回复
使用索引出的RGB值建立新的RGB图像
renxu350 2011-01-20
  • 打赏
  • 举报
回复
可以预先建立一个RGB颜色表,
然后使灰度值作为索引值,索引RGB颜色表中的值

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧