标题
算法:通过三个不同函数,将一个灰度值映射三个不同灰度值分别保存在三个不同的矩阵中,再把三个矩阵的值分别复制给一个新矩阵的三个通道中,这个新矩阵就是伪彩色图像矩阵,这样就由一张灰度图,得到一张伪彩色图像。
int main()
{
Mat grayImg = imread("D:\\2.jpg", 0);
imshow("原图", grayImg);
Mat R = grayImg.clone();
Mat G = grayImg.clone();
Mat B = grayImg.clone();
int rows = grayImg.rows;
int cols = grayImg.cols;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
int current = grayImg.at<uchar>(i, j);
if (0 < current && current <= 64)
{
R.at<uchar>(i, j) = 0;
G.at<uchar>(i, j) = 4 * current;
B.at<uchar>(i, j) = 255;
}
else if (64 < current && current <= 128)
{
R.at<uchar>(i, j) = 0;
G.at<uchar>(i, j) = 255;
B.at<uchar>(i, j) = -4 * (current - 64) + 255;
}
else if (128 < current && current <= 192)
{
R.at<uchar>(i, j) = 4 * (current - 128);
G.at<uchar>(i, j) = 255;
B.at<uchar>(i, j) = 0;
}
else
{
R.at<uchar>(i, j) = 255;
G.at<uchar>(i, j) = -4 * (current - 255);
B.at<uchar>(i, j) = 0;
}
}
}
Mat channels[3]; //定义对象数组,分别存储三个通道
Mat pseuMat; //融合三个通道,存储在一个Mat里
channels[0] = B;
channels[1] = G;
channels[2] = R;
merge(channels, 3, pseuMat);
imshow("效果图", pseuMat);
waitKey(0);
return 0;
}