opencv伪色彩增强 pseudocolor generation

本文介绍了使用OpenCV进行伪色彩增强的方法,包括基于特定准则的灰度值到彩色的转换算法,如空间域灰度级-彩色变换法、彩虹编码,并提供了相应的OpenCV代码示例。

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



OpenCV232 這部份例程是去年做的


所以最近是不會再有更新了


我覺得還蠻有意義


是會繼續的






【22】伪色彩增强

伪彩色图像处理(也称假彩色)是根据特定的准则对灰度值赋以彩色的处理。

原图

        int w = 640;
        int h = 240;
        src.create(cvSize(w, h), CV_8U);

        for (int i=0; i<src.rows; ++i)
        {
                uchar *pt = src.ptr<uchar>(i);
                for (int j=0; j<src.cols; ++j)
                {
                        pt[j] = j;
                }
        }





直接用OpenCV的转换颜色函数
cvtColor(src, dst, CV_GRAY2RGB);
//失败,因为GRAY->RGB[A] R=Y G=Y B=Y A=0




这是cvchina上的一个算法
http://www.cvchina.info/2010/11/22/pseudocolor/#more-2153

说是讲某个点的灰度值按照9位 RGBRGBRGB取出R G B的数值
例如
(2)=(000 000 010)B分解出(000,100,000)B
然后再在后面补5个零够9位
那就是(000 000 000,010 000 000,000 000 000)B
就是灰度值2对应RGB(0,128,0)

是不是很晕

再来一个
(121) = (001 111 001)B分解出(010,010,111)B
然后补齐(001 000 000,001 000 000,111 000 00)B
就是灰度121对应RGB(64,64,224)

void myPseudocolorGeneration(InputArray src,OutputArray dst)
{
        Mat red(1,256, CV_8U),green(1,256, CV_8U),blue(1,256, CV_8U);

        int bit_per_channle = 3;
        int bits_total = 3*bit_per_channle;
        int color_num = 1<<bits_total;

    for(int c = 0; c < color_num/2; c++)
        {
        int r = 0;
        int g = 0;
        int b = 0;
        for(int k = 0; k < bits_total ; )
                {
            b = (b << 1) + ((c >> k++) & 1);
            g = (g << 1) + ((c >> k++) & 1);
            r = (r << 1) + ((c >> k++) & 1);
        }
        r = r << (8 - bit_per_channle);
        g = g <&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值