OpenCV4影像處理--影像查詢表和顏色表

Mzcc_bbms發表於2020-10-20

查詢表和顏色表

影像查詢表

  • 查詢表(look up table )概念
    查詢表【i】=new value,查詢表第i項(灰度值i)的新值為 new value。也就是,將原影像中畫素值為i的畫素變為值”new value“。查詢表可以看成一個簡單的一對一的對映函式 y= f(x)。對於較大的影像,有效的方法是預先計算所有可能的值,然後需要這些值的時候,利用查詢表直接賦值即可。查詢表是一維或多維陣列,儲存了不同輸入值所對應的輸出值,其優勢在於只需讀取、無需計算,所以大大提高處理速度。
    在這裡插入圖片描述
  • API : LUT
CV_EXPORTS_W void LUT(InputArray src, InputArray lut, OutputArray dst);
  • 通過自己的色卡 color,製作查詢表 lut , 然後將 lut 應用於影像 src
	Mat src = imread("F:/code/images/wm.jpg");
	if (src.empty()) {
		printf("fail to read");
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);
	imshow("input", src);
	
	//製作查詢表 lut
	Mat color = imread("F:/code/images/rainbow.png");//色卡
	Mat lut = Mat::zeros(256, 1, CV_8UC3);//將 color 對映到 畫素 0~255
	Mat dst;
	
	for (int i = 0; i < 256; i++) {
		lut.at<Vec3b>(i, 0) = color.at<Vec3b>(11, i);
	}
	LUT(src, lut, dst);

	imshow("color", color);
	imshow("lut", lut);
	imshow("lut demo", dst);

在這裡插入圖片描述

影像顏色表

  • 顏色表概念
    opencv applyColorMap 提供12種顏色查詢表
    在這裡插入圖片描述
  • API : applyColorMap
CV_EXPORTS_W void applyColorMap(InputArray src, OutputArray dst, int colormap);
  • 通過使用顏色表,選擇不同風格進行影像處理
	Mat src = imread("F:/code/images/wm.jpg");
	if (src.empty()) {
		printf("fail to read");
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);
	imshow("input", src);
	
	//顏色表 :下例應用了 COLORMAP_CIVIDIS 風格
	Mat dst2;
	applyColorMap(src, dst2, COLORMAP_CIVIDIS);
	imshow("color_map demo", dst2);

在這裡插入圖片描述

相關文章