Qt+OpenCV联合开发(十一)--自带颜色表操作

一、伪彩变换及伪彩色函数

1、伪彩变换

我们在处理红外图像时,由于红外图像都是16位的数据,灰度范围较大,对比度不明显,经常通过直方图均衡的方式将图像增强进行8位的显示。

红外图像在一定程度上反映了环境中物体的温度变化,我们可以认为较暗的图像区域表示的是温度较低的区域(蓝色表示),更加明亮的区域认为是温度较高的区域(红色表示),进而将灰度图转变为彩色数据便于人类的视觉系统进行可视化。

用伪彩色更好地显示数据的其他例子是高度、压力、密度、湿度等等。

2、applyColorMap伪彩色函数

qt的opencv中定义了13种ColormapTypes(包括各种色度图),应用于8位的灰度图像

Qt+OpenCV联合开发(十一)--自带颜色表操作_第1张图片我们可以使用函数applyColorMap,针对彩色图像可以调成各种颜色,如果是灰度图像,可以进行伪彩色增强。

applyColorMap函数的c++原型:【头文件:#include "opencv2/imgproc.hpp"】

参数说明:

// InputArray src:   输入原始图像(只支持8位灰度图像)
// OutputArray dst:  输出结果伪彩色图像
// int colormap:     色度图的种类,即匹配到的颜色LUT,openCV支持13种的颜色风格的查找表映射

 下图显示了一个关于colormap(12种色度图)的视觉表示和COLORMAP_*的数值,左边的颜色模式表示较低的灰度值,右边的则表示较高的灰度值。

Qt+OpenCV联合开发(十一)--自带颜色表操作_第2张图片

二、实现效果

Qt+OpenCV联合开发(十一)--自带颜色表操作_第3张图片

 以下图片的色度分别对应上述colormap的色度

Qt+OpenCV联合开发(十一)--自带颜色表操作_第4张图片

三、代码

void test1::color_style(Mat &image)
{
    int colormap[] = {
        COLORMAP_AUTUMN, 
        COLORMAP_BONE, 
        COLORMAP_JET, 
        COLORMAP_WINTER, 
        COLORMAP_RAINBOW, 
        COLORMAP_OCEAN, 
        COLORMAP_SUMMER,
        COLORMAP_SPRING, 
        COLORMAP_COOL, 
        COLORMAP_HSV, 
        COLORMAP_PINK, 
        COLORMAP_HOT, 
        //COLORMAP_PARULA 
        //        COLORMAP_CIVIDIS,
        //        COLORMAP_DEEPGREEN,
        //        COLORMAP_INFERNO,
        //        COLORMAP_MAGMA,
        //            COLORMAP_TWILIGHT,
        //            COLORMAP_TURBO,
        //            COLORMAP_TWILIGHT,
        //            COLORMAP_VIRIDIS,
        //            COLORMAP_TWILIGHT_SHIFTED,
    };

    Mat dst;
    int index=0;
    while(true)
    {
        int c = waitKey(1300);
        if(c == 27)//esc键退出
        {
            break;
        }
        if (c == 49)//按1键保存图片到指定文件夹
        {
            string img_Name = "E:\\images\\outputImg\\mingStar" + to_string(index-1) + ".jpg";
            std::cout << "you enter key #1" << std::endl;
            imwrite(img_Name, dst);
        }
        applyColorMap(image,dst,colormap[index%11]);
        index++;
        if(index == 11)
        {
            index=0;
        }
        imshow("switch color style",dst);
    }

}

main中测试: 

Qt+OpenCV联合开发(十一)--自带颜色表操作_第5张图片

补充:

1、当我们需要连续保存多张图片到指定为文件夹,就要使用变量替换图片的名字。在C++中,to_string()函数是将数值转化为字符串。返回对应的字符串。将图片的名字转成字符串之后,再与前面的路径字符串和后面的图片格式字符串结合在一起来实现
2、注意:一般在Windows系统中使用“\”和“/”没有本质区别,但是“\”默认是转义字符,所以在路径中的“\”需要加上“\”,即“\\”才表示路径中的“\”。在Linux和Unix中需要使用“/”。
3、

LUT颜色查找表

  • 定义一个映射:**色度图是从0-255值256种颜色映射。在OpenCV,我们需要创建一个大小为256×1的8位彩色图像来存储256个颜色值。
  • 对照颜色使用查找表:**在OpenCV,你可以申请一个信息存储在一个256×1的彩色图像使用查找表LUT图像。

LUT定义

// src表示的是输入图像(可以是单通道也可是3通道)
// lut表示查找表(查找表也可以是单通道,也可以是3通道,如果输入图像为单通道,那查找表必须为单通道,若输入图像为3通道,查找表可以为单通道,也可以为3通道,若为单通道则表示对图像3个,通道都应用这个表,若为3通道则分别应用 )
// dst表示输出图像

 原创不易,转载请注明出处:

https://blog.csdn.net/hml111666/article/details/122729387

你可能感兴趣的:(Qt实战,opencv,C/C++,qt,opencv)