假如我们想在图片上显示不同区域的温度,我们可以把红外图像上的温度数据叠加为灰度图像,暗的区域代表冷的温度,更明亮的区域代表较热的温度,但是这样的呈现不能给人类视觉带来直觉的感受,不能更好地感知颜色的变化。如果我们用不同的颜色代表不同的温度,比如用蓝色表示冷的温度,红的表示热的温度,能够带来更好的感知。为了更好地展示数据,我们把数据转换为彩色数据来实现可视化,用伪彩色更好地显示温度、压力、湿度等数据。
OpenCV提供了伪彩色函数applyColorMap来实现伪彩色功能。
原型1
CV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, int colormap);
功能
把给定的图像转换为伪彩色图像。
参数释义:
-
参数1 src 输入源图像,灰度图或者CV_8UC1、CV_8UC3类型的图。
-
参数2 dst 转换后的伪彩色图,注意:dst调用了Mat::create
-
参数3 colormap 伪彩色图像类型 参考ColormapTypes
原型2
CV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, InputArray userColor);
功能
把给定的图像转换为伪彩色图像。
参数释义:
-
参数1 src 输入源图像,灰度图或者CV_8UC1、CV_8UC3类型的图。
-
参数2 dst 转换后的伪彩色图,注意:dst调用了Mat::create
-
参数3 userColor 用户定义的类型,适用于类型:CV_8UC1 或者 CV_8UC3并且大小为256
示例源码
#include <iostream>
#include <opencv2/opencv.hpp>
int main() {
cv::Mat image = cv::imread("D:\\OpenCVtest\\images\\juice.png");
cv::Mat imageMapAutum;
cv::Mat imageMapBone;
cv::Mat imageMapJet;
cv::Mat imageMapCIVIDIS;
cv::Mat imageMapCOOL;
cv::Mat imageMapDEEPGREEN;
cv::Mat imageMapHOT;
cv::Mat imageMapHSV;
cv::Mat imageMapINFERNO;
cv::Mat imageMapMAGMA;
cv::Mat imageMapOCEAN;
cv::Mat imageMapPARULA;
cv::Mat imageMapPINK;
cv::Mat imageMapPLASMA;
cv::Mat imageMapRAINBOW;
cv::Mat imageMapSPRING;
cv::Mat imageMapSUMMER;
cv::Mat imageMapTURBO;
cv::Mat imageMapTWILIGHT;
cv::Mat imageMapTWILIGHT_SHIFTED;
cv::Mat imageMapVIRIDIS;
cv::Mat imageMapWINTER;
cv::applyColorMap(image, imageMapAutum, cv::COLORMAP_AUTUMN);
cv::applyColorMap(image, imageMapBone, cv::COLORMAP_BONE);
cv::applyColorMap(image, imageMapJet, cv::COLORMAP_JET);
cv::applyColorMap(image, imageMapCIVIDIS, cv::COLORMAP_CIVIDIS);
cv::applyColorMap(image, imageMapCOOL, cv::COLORMAP_COOL);
cv::applyColorMap(image, imageMapDEEPGREEN, cv::COLORMAP_DEEPGREEN);
cv::applyColorMap(image, imageMapHOT, cv::COLORMAP_HOT);
cv::applyColorMap(image, imageMapHSV, cv::COLORMAP_HSV);
cv::applyColorMap(image, imageMapINFERNO, cv::COLORMAP_INFERNO);
cv::applyColorMap(image, imageMapMAGMA, cv::COLORMAP_MAGMA);
cv::applyColorMap(image, imageMapOCEAN, cv::COLORMAP_OCEAN);
cv::applyColorMap(image, imageMapPARULA, cv::COLORMAP_PARULA);
cv::applyColorMap(image, imageMapPINK, cv::COLORMAP_PINK);
cv::applyColorMap(image, imageMapPLASMA, cv::COLORMAP_PLASMA);
cv::applyColorMap(image, imageMapRAINBOW, cv::COLORMAP_RAINBOW);
cv::applyColorMap(image, imageMapSPRING, cv::COLORMAP_SPRING);
cv::applyColorMap(image, imageMapSUMMER, cv::COLORMAP_SUMMER);
cv::applyColorMap(image, imageMapTURBO, cv::COLORMAP_TURBO);
cv::applyColorMap(image, imageMapTWILIGHT, cv::COLORMAP_TWILIGHT);
cv::applyColorMap(image, imageMapTWILIGHT_SHIFTED, cv::COLORMAP_TWILIGHT_SHIFTED);
cv::applyColorMap(image, imageMapVIRIDIS, cv::COLORMAP_VIRIDIS);
cv::applyColorMap(image, imageMapWINTER, cv::COLORMAP_WINTER);
cv::imshow("image", image);
cv::imshow("Autum", imageMapAutum);
cv::imshow("Bone", imageMapBone);
cv::imshow("Jet", imageMapJet);
cv::imshow("CIVIDIS", imageMapCIVIDIS);
cv::imshow("COOL", imageMapCOOL);
cv::imshow("DEEPGREEN", imageMapDEEPGREEN);
cv::imshow("HOT", imageMapHOT);
cv::imshow("HSV", imageMapHSV);
cv::imshow("INFERNO", imageMapINFERNO);
cv::imshow("MAGMA", imageMapMAGMA);
cv::imshow("OCEAN", imageMapOCEAN);
cv::imshow("PARULA", imageMapPARULA);
cv::imshow("PINK", imageMapPINK);
cv::imshow("PLASMA", imageMapPLASMA);
cv::imshow("RAINBOW", imageMapRAINBOW);
cv::imshow("SPRING", imageMapSPRING);
cv::imshow("SUMMER", imageMapSUMMER);
cv::imshow("TURBO", imageMapTURBO);
cv::imshow("TWILIGHT", imageMapTWILIGHT);
cv::imshow("TWILIGHT_SHIFTED", imageMapTWILIGHT_SHIFTED);
cv::imshow("VIRIDIS", imageMapVIRIDIS);
cv::imshow("WINTER", imageMapWINTER);
std::cout << "";
cv::waitKey(0);
}
运行结果如下图所示,效果供各位参考使用: