//将灰度图转换为彩虹色图
void gray2rainbowcolor(Mat &img,Mat &img_color){
img_color = Mat::zeros(img.rows, img.cols, CV_8UC3);
#define IMG_B(img,y,x) img.at<Vec3b>(y,x)[0]
#define IMG_G(img,y,x) img.at<Vec3b>(y,x)[1]
#define IMG_R(img,y,x) img.at<Vec3b>(y,x)[2]
uchar tmp2=0;
//转为彩虹图的具体算法,主要思路是把灰度图对
//应的0~255的数值分别转换成彩虹色:红、橙、黄、绿、青、蓝。
for (int y=0;y<img.rows;y++)
{
for (int x=0;x<img.cols;x++)
{
tmp2 = img.at<uchar>(y,x);
if(tmp2 ==0 )
continue;
if (tmp2 <= 51)
{
IMG_B(img_color,y,x) = 255;
IMG_G(img_color,y,x) = tmp2*5;
IMG_R(img_color,y,x) = 0;
}
else if (tmp2 <= 102)
{
tmp2-=51;
IMG_B(img_color,y,x) = 255-tmp2*5;
IMG_G(img_color,y,x) = 255;
IMG_R(img_color,y,x) = 0;
}
else if (tmp2 <= 153)
{
tmp2-=102;
IMG_B(img_color,y,x) = 0;
IMG_G(img_color,y,x) = 255;
IMG_R(img_color,y,x) = tmp2*5;
}
else if (tmp2 <= 204)
{
tmp2-=153;
IMG_B(img_color,y,x) = 0;
IMG_G(img_color,y,x) = 255-uchar(128.0*tmp2/51.0+0.5);
IMG_R(img_color,y,x) = 255;
}
else
{
tmp2-=204;
IMG_B(img_color,y,x) = 0;
IMG_G(img_color,y,x) = 127-uchar(127.0*tmp2/51.0+0.5);
IMG_R(img_color,y,x) = 255;
}
}
}
}
void gray2rainbowcolor(Mat &img,Mat &img_color){
img_color = Mat::zeros(img.rows, img.cols, CV_8UC3);
#define IMG_B(img,y,x) img.at<Vec3b>(y,x)[0]
#define IMG_G(img,y,x) img.at<Vec3b>(y,x)[1]
#define IMG_R(img,y,x) img.at<Vec3b>(y,x)[2]
uchar tmp2=0;
//转为彩虹图的具体算法,主要思路是把灰度图对
//应的0~255的数值分别转换成彩虹色:红、橙、黄、绿、青、蓝。
for (int y=0;y<img.rows;y++)
{
for (int x=0;x<img.cols;x++)
{
tmp2 = img.at<uchar>(y,x);
if(tmp2 ==0 )
continue;
if (tmp2 <= 51)
{
IMG_B(img_color,y,x) = 255;
IMG_G(img_color,y,x) = tmp2*5;
IMG_R(img_color,y,x) = 0;
}
else if (tmp2 <= 102)
{
tmp2-=51;
IMG_B(img_color,y,x) = 255-tmp2*5;
IMG_G(img_color,y,x) = 255;
IMG_R(img_color,y,x) = 0;
}
else if (tmp2 <= 153)
{
tmp2-=102;
IMG_B(img_color,y,x) = 0;
IMG_G(img_color,y,x) = 255;
IMG_R(img_color,y,x) = tmp2*5;
}
else if (tmp2 <= 204)
{
tmp2-=153;
IMG_B(img_color,y,x) = 0;
IMG_G(img_color,y,x) = 255-uchar(128.0*tmp2/51.0+0.5);
IMG_R(img_color,y,x) = 255;
}
else
{
tmp2-=204;
IMG_B(img_color,y,x) = 0;
IMG_G(img_color,y,x) = 127-uchar(127.0*tmp2/51.0+0.5);
IMG_R(img_color,y,x) = 255;
}
}
}
}
int main()
{
Mat img(200,255*3,CV_8UC1);
for(int j =0,k=0;j<255;j++,k+=3){
for(int i=0;i<img.rows;++i){
img.at<uchar>(i,k) = j;
img.at<uchar>(i,k+1) = j;
img.at<uchar>(i,k+2) = j;
}
}
imshow("test",img);
Mat img_colorppp;
gray2rainbowcolor(img,img_colorppp);
imshow("彩虹图",img_colorppp);
waitKey();
return 0;
}
效果图: