LUTで高速にMatを操作する

ルックアップテーブル(LUT)関数を用いることで、Matの全ての要素に一律な基準で値の変更する場合に高速化が期待できます。

#include "opencv/cv.h"
#include "opencv/highgui.h"

using namespace cv;
int main(){
    Mat lookUpTable(1, 256, CV_8U);
    uchar* p = lookUpTable.data;
    for( int i = 0; i < 256; ++i){
        p[i] = i*0.3;
    }
    Mat img = imread("sample.jpg");
    LUT(img, lookUpTable, img);
    imshow("IMAGE", img);
    waitKey();
    return 0;
}

左の元画像に対して、上のコードにより各画素の値を0.3倍にしたものを表示すると右のような画像が出力されます。

sample

lut