OpenCV中的LUT函式(查表法)
阿新 • • 發佈:2019-02-13
簡單來說就是通過對映關係,將原影象的畫素值進行縮減操作,比如說 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); }
程式執行結果: