把灰度圖轉換成彩色圖和彩虹圖
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);
}
}
}
}