#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;



int main(int argc, char** argv)
{
   
    Mat img = imread("E:\\intern\\depth\\disp0.png", 0);

    imshow("img", img);
    //waitKey(0);
    Mat img_pseudocolor(img.rows, img.cols, CV_8UC3);//构造RGB图像,参数CV_8UC3教程文档里面有讲解

    int tmp = 0;
    for (int y = 0; y < img.rows; y++)//转为伪彩色图像的具体算法
    {
   
        for (int x = 0; x < img.cols; x++)
        {
   
            tmp = img.at<unsigned char>(y, x);
            img_pseudocolor.at<Vec3b>(y, x)[0] = abs(255 - tmp); //blue
            img_pseudocolor.at<Vec3b>(y, x)[1] = abs(127 - tmp); //green
            img_pseudocolor.at<Vec3b>(y, x)[2] = abs(0 - tmp); //red
        }
    }
    namedWindow("img_pseudocolor",0);
    imshow("img_pseudocolor", img_pseudocolor);

    Mat img_color(img.rows, img.cols, CV_8UC3);//构造RGB图像
#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;
    for (int y = 0; y < img.rows; y++)//转为彩虹图的具体算法,主要思路是把灰度图对应的0~255的数值分别转换成彩虹色:红、橙、黄、绿、青、蓝。
    {
   
        for (int x = 0; x < img.cols; x++)
        {
   
            tmp2 = img.at<uchar>(y, x);
            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;
            }
        }
    }
    namedWindow("img_rainbowcolor",0);
    imshow("img_rainbowcolor", img_color);
    waitKey(0);
}