1. 程式人生 > >OpenCV中的LUT函式(查表法)

OpenCV中的LUT函式(查表法)

簡單來說就是通過對映關係,將原影象的畫素值進行縮減操作,比如說  table[56]=5,就表示將畫素值為56的點對映為5,這種方法僅有賦值運算,不涉及乘除、加減運算,可以極大降低時間複雜度。

程式原始碼:

/*

LUT查表函式的使用,結合滑動條函式

*/
#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <string>
using namespace cv;
int barValue = 5;//滑動條初始值;(出現在分母不可為0)
int maxValue=100;//滑動條最大值
Mat srcImage, grayimage, table, OutImage;
void callback(int, void *);//宣告滑動條回撥函式
void CreatLookupTable(Mat &mat, int Level_value);//查詢表函式宣告
void CreatLookupTable(Mat &mat, int Level_value)//構建查詢表
{
	int i, j;
	uchar *p;
	mat.create(1, 256, CV_8UC1);//建立一個Mat矩陣,存放縮減後的畫素值
	p = mat.data;
	for (i = 0; i <256; i++)
	{
		if (Level_value == 0)Level_value++;//特別注意分母不為0;
		p[i] = (i / Level_value)*Level_value;
	}
}
int main()
{
	srcImage = imread("timg.jpg");//載入影象
 	cvtColor(srcImage, grayimage, COLOR_BGR2GRAY);//轉化為灰度影象
	namedWindow("灰度影象", 0);//顯示灰度影象
	imshow("灰度影象", grayimage);
	namedWindow("縮減後的影象", 0);
	createTrackbar("縮減調節", "縮減後的影象",&barValue,maxValue, callback);//建立滑動條,滑鼠調節顏色空間的縮減程度
	callback(barValue,0);//初始顯示
	waitKey(0);
	return 0;
 }
void callback(int, void *)//回撥函式供createTrackbar呼叫
{
	CreatLookupTable(table, barValue);
	LUT(grayimage, table, OutImage);
	imshow("縮減後的影象", OutImage);
 }

程式執行結果: