灰度圖轉換成彩色圖和彩虹圖

把灰度圖轉換成彩色圖和彩虹圖

1. 灰度圖轉換成彩色圖
void Gray2Color(const cv::Mat const &src, cv::Mat &dst){
    dst = cv::Mat(src.rows, src.cols, CV_8UC3);

    int tmp = 0;
    for (size_t y = 0; y < src.rows; y++){
        for (size_t x = 0; x < src.cols; x++) {
            tmp = src.at<unsigned char>(y, x);

            dst.at<cv::Vec3b>(y, x)[0] = abs(255 - tmp);
            dst.at<cv::Vec3b>(y, x)[1] = abs(127 - tmp);
            dst.at<cv::Vec3b>(y, x)[2] = abs(0 - tmp);
        }
    }

}


2. 灰度圖轉換爲彩虹圖
對應轉換規則如下:
//
//        R         G        B        gray
//------------------------------------------------
//紅      255,      0,    0,          255
//橙      255,    127,    0,          204
//黃      255,    255,    0,          153
//綠        0,    255,    0,          102
//青        0,    255,  255,           51
//藍        0,      0,  255,            0
//------------------------------------------------

轉換代碼:
void Gray2Rainbox(const cv::Mat const &src, cv::Mat &dst){
    dst = cv::Mat(src.rows, src.cols, CV_8UC3);
    uchar tmp = 0;
    for (size_t y = 0; y < src.rows; y++){
        for (size_t x = 0; x < src.cols; x++) {
            tmp = src.at<unsigned char>(y, x);

            if (tmp <= 51){
                dst.at<cv::Vec3b>(y, x)[0] = abs(255);
                dst.at<cv::Vec3b>(y, x)[1] = abs(tmp * 5);
                dst.at<cv::Vec3b>(y, x)[2] = abs(0);
            }
            else if (tmp <= 102){
                tmp -= 51;
                dst.at<cv::Vec3b>(y, x)[0] = abs(255 - tmp * 5);
                dst.at<cv::Vec3b>(y, x)[1] = abs(255);
                dst.at<cv::Vec3b>(y, x)[2] = abs(0);
            }
            else if (tmp <= 153){
                tmp -= 102;
                dst.at<cv::Vec3b>(y, x)[0] = abs(0);
                dst.at<cv::Vec3b>(y, x)[1] = abs(255);
                dst.at<cv::Vec3b>(y, x)[2] = abs(tmp * 5);
            }
            else if (tmp <= 204){
                tmp -= 153;
                dst.at<cv::Vec3b>(y, x)[0] = abs(0);
                dst.at<cv::Vec3b>(y, x)[1] = abs(uchar(255 - (tmp * 128.0 / 51.0)));
                dst.at<cv::Vec3b>(y, x)[2] = abs(255);
            }
            else {
                tmp -= 204;
                dst.at<cv::Vec3b>(y, x)[0] = abs(0);
                dst.at<cv::Vec3b>(y, x)[1] = abs(uchar(127 - (tmp * 128.0 / 51.0)));
                dst.at<cv::Vec3b>(y, x)[2] = abs(255);
            }
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章