[opencv] 伪彩色和彩虹图

本文介绍了一种将灰度图像转换为彩虹色图像的方法。通过特定算法将灰度值映射到红、橙、黄、绿、青、蓝等颜色上,实现灰度图到彩色图的转变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//将灰度图转换为彩虹色图
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;

}


效果图:






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值