OpenCV中的假彩色滤镜

时间:2013-08-27 18:38:18

标签: opencv

我正在尝试在OpenCV上找到一些false color过滤器,并鞭打文档无济于事。我想知道它是否在OpenCV中被称为其他东西,因为它似乎足以在框架中实现。

如何应用此过滤器?

4 个答案:

答案 0 :(得分:2)

您可以使用applyColorMap:http://docs.opencv.org/trunk/modules/contrib/doc/facerec/colormaps.html

#include <opencv2/contrib/contrib.hpp>
cv::Mat grayImage...
cv::falseColored;
cv::applyColorMap(grayImage, falseColored, cv::COLORMAP_JET);

他们有许多假色图。

答案 1 :(得分:1)

如果没有实现它,你可以采取更通用的方法:

  • 将图像转换为HSV
  • 将每个像素的Hue通道设置为您的输入色调。

答案 2 :(得分:0)

有几种假染色方法。通常,图像是三个强度图像的合成。

  1. 创建三个包含您想要描绘的值的1通道矩阵。要重用现有矩阵中的频道,请使用cv::split()
  2. 对每个矩阵应用适当的归一化(也取决于步骤4)
  3. 使用cv::merge()
  4. 创建一个3通道矩阵
  5. 可选:使用cv::cvtColor()更改这些频道的含义。例如:从HSV转换为RGB,使得第一个输入变量将是色调,第二个是饱和度,第三个是伪彩色图像的值。
  6. 使用连续调色板将灰度图像吹制成三种颜色的另一种情况称为伪彩色。请参阅@melnibon的答案。

答案 3 :(得分:0)

这是我用Python编写的一个方便的函数,它取自一个项目,该项目应用了伪彩色/假彩色的色彩图,我用它来利用热成像设备的输入很好地区分温度变化。无论你喜欢什么,这个功能都可以改装。

代码提供了一种在所有不同的OpenCV过滤器之间切换的机制,以及使用自定义色彩映射的选项。

将filter_mode设置为0-11以应用OpenCV过滤器。否则将filter_mode设置为12或13以使用自定义1x256 RGB图像渐变作为滤镜来转换灰度图像

见下面的用法...

import cv2 # import OpenCV
...
def apply_colormap_filter(cv2_image, filter_mode) :
        # A colormap for psudocolors/false color to distinguish hot spots in image
        # input: [cv2_image] the greyscale input, [filter_mode] filter selection (0-13)

        if filter_mode >= 12 : # lut image constraint: image has to be RGB of size 1x256
            ###### custom colormaps ######
            if filter_mode == 12 :
                lut = cv2.imread('thermal-colormap.png') # 1x256 RGB image
            elif filter_mode == 13 :
                lut = cv2.imread('lut_sky.png') # 1x256 RGB image
            else :
                lut = cv2.imread('lut_sky.png') # 1x256 RGB image

            # APPLY CUSTOM FILTER
            cv2_image = cv2.cvtColor(cv2_image, cv2.COLOR_GRAY2BGR);

            final = cv2.LUT(cv2_image, lut)

            ###### custom colormaps ######
        elif filter_mode < 12 :
            ###### Utilise OpenCL inbuilt filters ######

            final = cv2.applyColorMap(cv2_image, filter_mode)

            ###### Utilise OpenCL inbuilt filters ######
        return final # return the resultant False-colored image

gray = cv2.imread('grayscale-image.png')  # some grayscale image of variable dimensions
thermal = apply_colormap_filter(gray, 12) # Use custom filter
cv2.imshow('Thermal Image', thermal)