OpenCV 伪彩色处理

伪彩色处理是将灰度图像通过颜色映射转换为彩色图像的技术,常用于增强可视化效果或突出显示特定灰度范围。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. 伪彩色处理应用场景

  1. 热成像数据可视化 - 使用JET或HOT色彩映射显示温度分布

  2. 医学影像 - 增强X光、CT或MRI图像的可读性

  3. 科学数据可视化 - 显示高度、深度或其他物理量

  4. 夜视图像处理 - 增强低光条件下的图像

4. 性能优化技巧

  1. 预计算LUT - 对于实时应用,预先计算好颜色查找表

  2. 使用UMat - 对于支持OpenCL的设备,使用UMat加速处理

  3. 并行处理 - 对大图像可分块并行处理