示例代码如下:
void demo::color_style(Mat& image)
{
int colormap[] = {
COLORMAP_AUTUMN,
COLORMAP_BONE,
COLORMAP_CIVIDIS,
COLORMAP_COOL,
COLORMAP_HOT,
COLORMAP_HSV,
COLORMAP_INFERNO,
COLORMAP_JET,
COLORMAP_MAGMA,
COLORMAP_OCEAN,
COLORMAP_PARULA,
COLORMAP_PINK,
COLORMAP_PLASMA,
COLORMAP_RAINBOW,
COLORMAP_SPRING,
COLORMAP_SUMMER,
COLORMAP_TWILIGHT,
COLORMAP_TWILIGHT_SHIFTED,
COLORMAP_VIRIDIS,
COLORMAP_WINTER};
Mat dsc;
int index = 0;
while (true)
{
int c = waitKey(500);
if (c == 27)
break;
applyColorMap(image, dsc, colormap[index % 20]);
index++;
imshow("图像类型", dsc);}
}
这里的重点是applyColorMap()函数,它声明在imgproc.hpp
CV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, int colormap);
在上面这个函数的定义前面,我们还可以看到下面内容:
enum ColormapTypes
{
COLORMAP_AUTUMN = 0, //!< 
COLORMAP_BONE = 1, //!< 
COLORMAP_JET = 2, //!< 
COLORMAP_WINTER = 3, //!< 
COLORMAP_RAINBOW = 4, //!< 
COLORMAP_OCEAN = 5, //!< 
COLORMAP_SUMMER = 6, //!< 
COLORMAP_SPRING = 7, //!< 
COLORMAP_COOL = 8, //!< 
COLORMAP_HSV = 9, //!< 
COLORMAP_PINK = 10, //!< 
COLORMAP_HOT = 11, //!< 
COLORMAP_PARULA = 12, //!< 
COLORMAP_MAGMA = 13, //!< 
COLORMAP_INFERNO = 14, //!< 
COLORMAP_PLASMA = 15, //!< 
COLORMAP_VIRIDIS = 16, //!< 
COLORMAP_CIVIDIS = 17, //!< 
COLORMAP_TWILIGHT = 18, //!< 
COLORMAP_TWILIGHT_SHIFTED = 19 //!< 
};
可以发现在定义colormap(色度图)的时候,用了枚举,所以在我们的代码里面可以定义一个int类型的数组来存储20种colormap。
数组的索引是从0开始的,所以是index%20,如果是index%21就会报错。
applyColormap()函数第一个参数是输入的图像,第二个参数是输出的图像,第三个参数是提供的色彩图代码值。(就是colormap中的枚举类型)
applyColorMap()函数还有另一个用法:
CV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, InputArray userColor);
userColor:自定义的色彩(CV_8UC1 or CV_8UC3 and size 256)。
结果展示:
over!!!