在图像处理时,有时我们会将灰度图转换成色度图,即伪彩映射。在OpenCV3中提供了21种映射方式,如下:
Value | Name | Scale |
---|---|---|
0 | COLORMAP_AUTUMN | ![]() |
1 | COLORMAP_BONE | ![]() |
2 | COLORMAP_JET | ![]() |
3 | COLORMAP_WINTER | ![]() |
4 | COLORMAP_RAINBOW | ![]() |
5 | COLORMAP_OCEAN | ![]() |
6 | COLORMAP_SUMMER | ![]() |
7 | COLORMAP_SPRING | ![]() |
8 | COLORMAP_COOL | ![]() |
9 | COLORMAP_HSV | ![]() |
10 | COLORMAP_PINK | ![]() |
11 | COLORMAP_HOT | ![]() |
12 | COLORMAP_PARULA | ![]() |
13 | COLORMAP_MAGMA | ![]() |
14 | COLORMAP_INFERNO | ![]() |
15 | COLORMAP_PLASMA | ![]() |
16 | COLORMAP_VIRIDIS | ![]() |
17 | COLORMAP_CIVIDIS | ![]() |
18 | COLORMAP_TWILIGHT | ![]() |
19 | COLORMAP_TWILIGHT_SHIFTED | ![]() |
20 | COLORMAP_TURBO | ![]() |
示例程序:
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
// 色度图列表,对应关系可查看OpenCV源码或查看上表
string colormap_name(int id) {
switch (id) {
case COLORMAP_AUTUMN:
return "COLORMAP_AUTUMN";
case COLORMAP_BONE:
return "COLORMAP_BONE";
case COLORMAP_JET:
return "COLORMAP_JET";
case COLORMAP_WINTER:
return "COLORMAP_WINTER";
case COLORMAP_RAINBOW:
return "COLORMAP_RAINBOW";
case COLORMAP_OCEAN:
return "COLORMAP_OCEAN";
case COLORMAP_SUMMER:
return "COLORMAP_SUMMER";
case COLORMAP_SPRING:
return "COLORMAP_SPRING";
case COLORMAP_COOL:
return "COLORMAP_COOL";
case COLORMAP_HSV:
return "COLORMAP_HSV";
case COLORMAP_PINK:
return "COLORMAP_PINK";
case COLORMAP_HOT:
return "COLORMAP_HOT";
case COLORMAP_PARULA:
return "COLORMAP_PARULA";
case COLORMAP_MAGMA:
return "COLORMAP_MAGMA";
case COLORMAP_INFERNO:
return "COLORMAP_INFERNO";
case COLORMAP_PLASMA:
return "COLORMAP_PLASMA";
case COLORMAP_VIRIDIS:
return "COLORMAP_VIRIDIS";
case COLORMAP_CIVIDIS:
return "COLORMAP_CIVIDIS";
case COLORMAP_TWILIGHT:
return "COLORMAP_TWILIGHT";
case COLORMAP_TWILIGHT_SHIFTED:
return "COLORMAP_TWILIGHT_SHIFTED";
case COLORMAP_TURBO:
return "COLORMAP_TURBO";
}
return "NONE";
}
int main(int argc, char** argv) {
// 读入图像并转换为8位灰度图
Mat image = imread("figures/earth.jpg", IMREAD_GRAYSCALE);
// 存放输出图像
Mat image_output;
vector<Mat> image_vec_v, image_vec_h;
// 生成色度图
for (int i = 0; i < 3; ++i) { // 垂直拼接
image_vec_h.clear();
for (int j = 0; j < 7; ++j) { // 水平拼接
Mat image_color;
// 索引
int k = j + 3 * i;
// 调用函数生成色度图
applyColorMap(image, image_color, k);
resize(image_color, image_color, Size(200, 200));
// 添加文本
putText(image_color, colormap_name(k), Point(30, 180), cv::FONT_HERSHEY_DUPLEX, 0.5, Scalar::all(255), 1, cv::LINE_AA);
// 垂直拼接
image_vec_h.push_back(image_color);
}
Mat temp;
hconcat(image_vec_h, temp);
image_vec_v.push_back(temp);
}
// 水平拼接
vconcat(image_vec_v, image_output);
// 显示结果
imshow("Pseudo Colored", image_output);
waitKey(0);
return 0;
}
输入图像及输出结果:
参考
- https://github.com/spmallick/learnopencv/tree/master/Colormap