本系列代码托管于:https://github.com/chintsan-code/opencv4-tutorials

本篇使用的项目为:color_style_lut

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, const char** argv) {
	Mat src = imread("../sample/flower.png");
	if (src.empty()) {
		cout << "could not load image..." << endl;
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);
	imshow("input", src);

	Mat color = imread("D:/images/lut.png");
	Mat lut = Mat::zeros(256, 1, CV_8UC3);
	for (int i = 0; i < 256; i++) {
		lut.at<Vec3b>(i, 0) = color.at<Vec3b>(10, i);
	}
	imshow("color", color);
	Mat dst;
	LUT(src, lut, dst);
	imshow("lut-demo", dst);

	applyColorMap(src, dst, COLORMAP_OCEAN);
	imshow("color-map", dst);
	waitKey(0);
	destroyAllWindows();
	return 0;
}

LUT:使用查找表look-up对图像做变换,LUT:look-up table

void LUT(InputArray src, InputArray lut, OutputArray dst);
  • src:输入,8-bit
  • lut:查找表,256个映射。可以为单通道或与src相同的通道,如果为单通道,则src所有通道都会应用同一个lut
  • dst:输出,与src具有相同的尺寸和通道,与lut具有相同的深度

applyColorMap:使用现成的映射表。即LUT函数中的参数lut是现成的

void applyColorMap(InputArray src, OutputArray dst, int colormap);
  • src:输入图像,类型只能为CV_8UC1或CV_8UC3
  • dst:输出图像
  • colormap:系统提供的映射表,例如:
    • COLORMAP_AUTUMN
    • COLORMAP_RAINBOW
    • COLORMAP_OCEAN
    • ……