(6)OpenCV 4 学习之查找表(LUT)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zl_95520/article/details/88915683


一、函数解析

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 秋天 秋天
COLORMAP_BONE 1 骨感 在这里插入图片描述
COLORMAP_JET 2 喷射 在这里插入图片描述
COLORMAP_WINTER 3 冬天 在这里插入图片描述
COLORMAP_RAINBOW 4 彩虹 在这里插入图片描述
COLORMAP_OCEAN 5 海洋 在这里插入图片描述
COLORMAP_SUMMER 6 夏天 在这里插入图片描述
COLORMAP_SPRING 7 春天 在这里插入图片描述
COLORMAP_COOL 8 阴凉 在这里插入图片描述
COLORMAP_HSV 9 HSV 在这里插入图片描述
COLORMAP_PINK 10 粉色 在这里插入图片描述
COLORMAP_HOT 11 热的 在这里插入图片描述
COLORMAP_PARULA 12 森莺 在这里插入图片描述

二、代码示例

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;
}

三、结果展示

在这里插入图片描述


四、官方教程

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


五、进一步学习

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

1、了解定义

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

为了更直观了理解,可以参考下图:
在这里插入图片描述

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、结果展示

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zl_95520/article/details/88915683