伪彩色处理是将灰度图像通过颜色映射转换为彩色图像的技术,常用于增强可视化效果或突出显示特定灰度范围。OpenCV 提供了多种方法实现伪彩色处理。
1. 使用 applyColorMap 函数
OpenCV 提供了 cv::applyColorMap()
函数,支持多种预定义的色彩映射:
#include <opencv2/opencv.hpp>
int main() {
// 读取灰度图像
cv::Mat gray_img = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);
// 应用不同的色彩映射
cv::Mat color_img;
cv::applyColorMap(gray_img, color_img, cv::COLORMAP_JET);
// 显示结果
cv::imshow("Original", gray_img);
cv::imshow("Pseudocolor", color_img);
cv::waitKey(0);
return 0;
}
常用色彩映射选项:
-
COLORMAP_AUTUMN
- 红-橙-黄渐变 -
COLORMAP_BONE
- 蓝-白渐变 -
COLORMAP_JET
- 蓝-青-黄-红彩虹渐变 -
COLORMAP_WINTER
- 蓝-绿渐变 -
COLORMAP_RAINBOW
- 彩虹渐变 -
COLORMAP_OCEAN
- 绿-蓝渐变 -
COLORMAP_SUMMER
- 绿-黄渐变 -
COLORMAP_SPRING
- 品红-黄渐变 -
COLORMAP_COOL
- 青-品红渐变 -
COLORMAP_HSV
- HSV色彩空间 -
COLORMAP_HOT
- 黑-红-黄-白渐变 -
COLORMAP_PINK
- 粉红色调 -
COLORMAP_PARULA
- 类似MATLAB的parula色彩映射
2. 自定义颜色映射
如果需要更灵活的控制,可以创建自定义颜色查找表(LUT):
cv::Mat createCustomColormap() {
cv::Mat lut(1, 256, CV_8UC3);
for (int i = 0; i < 256; i++) {
// 自定义RGB映射规则
lut.at<cv::Vec3b>(0, i) = cv::Vec3b(
/* Blue */ i,
/* Green */ (i < 128) ? 2*i : 255,
/* Red */ 255-i
);
}
return lut;
}
int main() {
cv::Mat gray_img = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);
cv::Mat color_img;
// 创建自定义LUT
cv::Mat lut = createCustomColormap();
// 应用LUT
cv::LUT(gray_img, lut, color_img);
cv::imshow("Custom Pseudocolor", color_img);
cv::waitKey(0);
return 0;
}
3. 伪彩色处理应用场景
-
热成像数据可视化 - 使用JET或HOT色彩映射显示温度分布
-
医学影像 - 增强X光、CT或MRI图像的可读性
-
科学数据可视化 - 显示高度、深度或其他物理量
-
夜视图像处理 - 增强低光条件下的图像
4. 性能优化技巧
-
预计算LUT - 对于实时应用,预先计算好颜色查找表
-
使用UMat - 对于支持OpenCL的设备,使用UMat加速处理
-
并行处理 - 对大图像可分块并行处理