如何使用OpenCV获取索引图像的调色板

clever101
领域专家: C/C++技术领域
2009-04-01 10:32:17
16色图像、256色图像这些索引图像,图像数据存贮的实际上是
调色板的索引。那么使用OpenCV库打开bmp图像后,如何获取图像的调色板从而获取像素的真正的RGB颜色呢?
...全文
588 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
headsky2022 2012-03-02
  • 打赏
  • 举报
回复
不错,有道理
clever101 2009-04-01
  • 打赏
  • 举报
回复
多谢大虾。确实是这样的。
Tinary3v0 2009-04-01
  • 打赏
  • 举报
回复
从IplImage结构中得到的不是真正的RGB值么?

OpenCV的CvvIamge里面有这么一个函数:

void FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin )
{
assert( bmi && width >= 0 && height >= 0 && ( bpp == 8 || bpp == 24 || bpp == 32 ) );

BITMAPINFOHEADER* bmih = &( bmi->bmiHeader );

memset( bmih, 0, sizeof( *bmih ) );
bmih->biSize = sizeof( BITMAPINFOHEADER );
bmih->biWidth = width;
bmih->biHeight = origin ? abs( height ) : -abs( height );
bmih->biPlanes = 1;
bmih->biBitCount = ( unsigned short )bpp;
bmih->biCompression = BI_RGB;

if( bpp == 8 )
{
RGBQUAD* palette = bmi->bmiColors;
int i;
for( i = 0; i < 256; i++ )
{
palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed = ( BYTE )i;
//从这里可以看到OpenCV使用的全调色板 并没有对调色板进行删减,应该不会存在RGB值被改动的问题吧。
palette[i].rgbReserved = 0;
}
}
}

19,464

社区成员

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

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