python灰度图像为什么显示成彩色的_python opencv image 怎么变成伪彩色

匿名用户

1级

2017-05-16 回答

OpenCV 生成 伪彩色图像

opencv中没有易用的伪彩色图像生成函数,这里提供一个改造过的函数,利用自定义colorbar 将灰度图像转换成为伪彩色图像,优点在于提供了对于颜色的直观可操控性,转换方便。

函数代码如下:

[cpp] view plain copy 在CODE上查看代码片派生到我的代码片

//function : Pseudo color - enhanced

//author : Xin Yang, Shenzhen Univ., School of medicine

//email : xinyang@szu.edu.cn

//date : 2015.01.23

void C_Assistant::Gray2PseudoColor(IplImage* src ,IplImage *&dst)

{

if(dst != NULL)

{

cvReleaseImage(&dst);

dst = NULL;

}

dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);

IplImage *R, *G,*B;

//Load referred color bar

std::string HeatMapPath = "..\\ColorBar.png";

IplImage* heatmap = cvLoadImage(HeatMapPath.c_str());

//we split the heatmap along the 3 channels

R = cvCreateImage(cvGetSize(heatmap), heatmap->depth,1);

G = cvCloneImage(R);

B = cvCloneImage(R);

cvSplit(heatmap,B,G,R,NULL);

for(int x=0; xwidth; x++)

{

for(int y=0;yheight; y++)

{

//memory access to the destination color image (faster than splitting the 3 channels...)

unsigned char *data = &((unsigned char*)(dst->imageData + dst->widthStep*y ))[x*3];

//read the intensity value in the grayscale image

unsigned char gray = src->imageData[src->widthStep*y + x*src->nChannels];

//remember, OpenCV store images as BGR internally !

//So access [2] for Red, [1] for Green et [3] for Blue

float ColorIndex = gray/255.0*heatmap->height;

if(ColorIndex >= heatmap->height) ColorIndex = heatmap->height - 1;

data[2] = cvGet2D(R, ColorIndex, 1).val[0]; //Red channel

data[1] = cvGet2D(G, ColorIndex, 1).val[0]; //Green channel

data[0] = cvGet2D(B, ColorIndex, 1).val[0]; //Blue channel

}

}

//Clear

if(heatmap != NULL)

{

cvReleaseImage(&heatmap);

heatmap = NULL;

}

}

参考可用的colorbar如下,也可以自己生成来替换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值