我试图在 OpenCV 上找到一些错误的颜色过滤器,并且对文档进行了鞭挞,但无济于事。我想知道它是否在 OpenCV 中被称为其他东西,因为它似乎很常见,可以在框架中实现。
如何应用此过滤器?
您可以使用 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);
它们有许多可用的假彩色图。
如果无法实现它,您可以采取更通用的方法:
有几种假着色方法。通常,图像是三个强度图像的合成。
cv::split()
.cv::merge()
cv::cvtColor()
更改这些通道的含义。例如:从 HSV 转换为 RGB,这样第一个输入变量将是假彩色图像的色调,第二个是饱和度,第三个是值。另一种使用连续调色板将灰度图像放大为三种颜色的情况称为伪彩色。请参阅@melnibon 的答案。
这是我从一个项目中用 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)