opencv学习-007-伪色彩函数applyColorMap和LUT
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
void customColorMap(Mat &image);
int main(int argc, const char *argv[])
{
Mat src = imread("E:/Desktop/y.jpg");
if (src.empty())
{
printf("could not load image...\n");
return -1;
}
Mat gray, dst;
// 使用LUT
applyColorMap(src, dst, COLORMAP_SUMMER);
// 显示结果
imshow("colorMap", dst);
cvtColor(src, gray, COLOR_BGR2GRAY);
imshow("gray", gray);
customColorMap(gray);
waitKey(0);
return 0;
}
void customColorMap(Mat &image) {
int lut[256];
for (int i = 0; i < 256; i++) {
if (i < 127)
lut[i] = 0;
else
lut[i] = 255;
}
int h = image.rows;
int w = image.cols;
for (int row = 0; row < h; row++) {
for (int col = 0; col < w; col++) {
int pv = image.at<uchar>(row, col);
image.at<uchar>(row, col) = lut[pv];
}
}
imshow("lut demo", image);
}
运行结果:
1. 伪色彩函数applyColorMap
在OpenCV库中,常见的伪色彩模式可以通过 applyColorMap(InputArray src, OutputArray dst, int colormap)
直接调用。
void applyColorMap(InputArray src, OutputArray dst, int colormap)
src: 源图像(灰度图或彩色图(CV_8UC1 or CV_8UC3))。
dst: 在源图像上进行色彩映射后的结果图像。
colormap: 提供的色彩图代码值。(参见:ColormapTypes 枚举数据类型)
下图显示了一个关于colormap(色度图)的视觉表示和COLORMAP_*的数值,左边的颜色模式表示较低的灰度值,右边的则表示较高的灰度值。
Value | Name | Scale |
---|---|---|
0 | COLORMAP_AUTUMN | ![]() |
1 | COLORMAP_BONE | ![]() |
2 | COLORMAP_JET | ![]() |
3 | COLORMAP_WINTER | ![]() |
4 | COLORMAP_RAINBOW | ![]() |
5 | COLORMAP_OCEAN | ![]() |
6 | COLORMAP_SUMMER | ![]() |
7 | COLORMAP_SPRING | ![]() |
8 | COLORMAP_COOL | ![]() |
9 | COLORMAP_HSV | ![]() |
10 | COLORMAP_PINK | ![]() |
11 | COLORMAP_HOT | ![]() |
2. Look Up Table(LUT)查找表
其实这个伪色彩函数就是使用到了Look Up Table(LUT)查找表,是通过函数把图像像素对应的数值替换或者重新赋值到新的图像上,是一种映射的概念。
代码中customColorMap
函数就是自己实现了一个二值化的查找表,用来对图片进行二值化操作:
void customColorMap(Mat &image) {
int lut[256];
for (int i = 0; i < 256; i++) {
if (i < 127)
lut[i] = 0;
else
lut[i] = 255;
}
int h = image.rows;
int w = image.cols;
for (int row = 0; row < h; row++) {
for (int col = 0; col < w; col++) {
int pv = image.at<uchar>(row, col);
image.at<uchar>(row, col) = lut[pv];
}
}
imshow("lut demo", image);
}