opencv学习-007-伪色彩函数applyColorMap和LUT

opencv学习-007-伪色彩函数applyColorMap和LUT

  • 1. 伪色彩函数`applyColorMap`
  • 2. Look Up Table(LUT)查找表

#include 
#include 

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

运行结果:
opencv学习-007-伪色彩函数applyColorMap和LUT_第1张图片


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 在这里插入图片描述

opencv学习-007-伪色彩函数applyColorMap和LUT_第2张图片

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

opencv学习-007-伪色彩函数applyColorMap和LUT_第3张图片

你可能感兴趣的:(opencv,opencv,计算机视觉)