文章目录

  • 前言
  • 一、函数解析
  • 1、LUT查找表(applyColorMap)
  • 二、代码示例
  • 三、结果展示
  • 四、官方教程
  • 五、进一步学习
  • 1、了解定义
  • 2、代码示例
  • 3、结果展示



前言

最近心血来潮,想具体的去学习一下图像处理,所以报了知识星球的一个OpenCV研习社,将自己每天的学习,分享一下。写个 blog 加深一下知识。


一、函数解析

1、LUT查找表(applyColorMap)
CV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, int colormap)

参数一:CV_8UC1或CV_8UC3类型的灰色或彩色的源图像。
参数二:色彩映射后的源图像。
参数三:匹配到的颜色LUT, OpenCV支持13种颜色风格的查找表映射。

功能:在给定图像上应用GNU Octave / MATLAB等效色彩映射。

参数三的风格如下:

类型

属性值

颜色风格

色谱参照

COLORMAP_AUTUMN

0

秋天

lua 查找表元素 lut查找表_lua 查找表元素

COLORMAP_BONE

1

骨感

lua 查找表元素 lut查找表_OpenCV_02

COLORMAP_JET

2

喷射

lua 查找表元素 lut查找表_OpenCV_03

COLORMAP_WINTER

3

冬天

lua 查找表元素 lut查找表_OpenCV_04

COLORMAP_RAINBOW

4

彩虹

lua 查找表元素 lut查找表_代码示例_05

COLORMAP_OCEAN

5

海洋

lua 查找表元素 lut查找表_灰度值_06

COLORMAP_SUMMER

6

夏天

lua 查找表元素 lut查找表_OpenCV_07

COLORMAP_SPRING

7

春天

lua 查找表元素 lut查找表_代码示例_08

COLORMAP_COOL

8

阴凉

lua 查找表元素 lut查找表_灰度值_09

COLORMAP_HSV

9

HSV

lua 查找表元素 lut查找表_lua 查找表元素_10

COLORMAP_PINK

10

粉色

lua 查找表元素 lut查找表_lua 查找表元素_11

COLORMAP_HOT

11

热的

lua 查找表元素 lut查找表_OpenCV_12

COLORMAP_PARULA

12

森莺

lua 查找表元素 lut查找表_lua 查找表元素_13


二、代码示例

int main()
{
	Mat src = imread("C:/Users/XMuser/Desktop/Opencv/cos.jpg");

	if (src.empty())
	{
		printf("could not load image...\n");
		return -1;
	}
	imshow("input", src);

	Mat dst;
	//进行色彩映射
	applyColorMap(src, dst, COLORMAP_SPRING);
	imshow("colorMap", dst);

	waitKey(0);

	return 0;
}

三、结果展示

lua 查找表元素 lut查找表_代码示例_14


四、官方教程

传送门:官方教程(最新的OpenCV 4 的用法,其中包含 20 种风格类型)

lua 查找表元素 lut查找表_lua 查找表元素_15


lua 查找表元素 lut查找表_灰度值_16


五、进一步学习

上面介绍的方式是直接采用函数调用的方式,接下来介绍,如何使用我们自己定义的 LUT 来对图片进行颜色映射。

1、了解定义

LUT的应用范围比较广泛,例如:LUT(Look-Up Table)可以应用到一张像素灰度值的映射表,它将实际采样到的像素灰度值经过一定的变换如阈值、反转、二值化、对比度调整、线性变换等,变成了另外一个与之对应的灰度值,这样可以起到突出图像的有用信息,增强图像的光对比度的作用。很多PC系列卡具有8/10/12/16甚到32位的LUT,具体在LUT里进行什么样的变换是由软件来定义的。在这里lut最重要的意义,就在于兼容了普通显示器的高阶显示功能,使得那些不能被普通显示器所显示的宽色域(一般指超过srgb)能够尽量被大致模拟在普通显示器上。然而,lut所模拟的效果,只能作为参考,作为修图时的大致观感。最佳、最完整的呈现,仍然是显示器、显卡以及素材本身的各项指标高度一致,所谓“硬解码”。

为了更直观了理解,可以参考下图:

lua 查找表元素 lut查找表_OpenCV_17

2、代码示例
void customColorMap(Mat &image)
{
	int lut[256];
	//这边定义自己的 LUT
	for (int i = 0; i < 256; i++)
	{
		if (i<127)
		{
			lut[i] = 0;
		}
		else
		{
			lut[i] = 255;
		}
	}

	int height = image.rows;
	int width  = image.cols;

	for (int row = 0; row < height; row++)
	{
		for (int col = 0; col < width; col++)
		{
			int pv = image.at<uchar>(row, col);
			image.at<uchar>(row, col) = lut[pv];
		}
	}
	imshow("lut demo", image);
}

int main()
{
	Mat src = imread("C:/Users/XMuser/Desktop/Opencv/cos.jpg");

	if (src.empty())
	{
		printf("could not load image...\n");
		return -1;
	}
	imshow("input", src);

	Mat gray, dst;

	//applyColorMap(src, dst, COLORMAP_SPRING);
	//imshow("colorMap", dst);

	//转换为灰度图像,仅为示例,少写后面的循环
	cvtColor(src, gray, COLOR_BGR2GRAY);
	imshow("gray", gray);
	customColorMap(gray);

	waitKey(0);

	return 0;
}
3、结果展示

lua 查找表元素 lut查找表_灰度值_18