现在的位置: 首页 > 综合 > 正文

OpenCV 生成 伪彩色图像 pseudo color image 易用colorbar 调节

2018年10月28日 ⁄ 综合 ⁄ 共 1427字 ⁄ 字号 评论关闭

OpenCV 生成 伪彩色图像

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

函数代码如下:

//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; x<src->width; x++)
	{
		for(int y=0;y<src->height; 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如下,也可以自己生成来替换。






抱歉!评论已关闭.