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如下,也可以自己生成来替换。