我想通過顏色深度縮放來減少顏色。使用opencv和LUT減少顏色深度
喜歡這個例子:
第一圖像是CGA分辨率,第二個是EGA,第三是HAM。 我想用cv :: LUT來做,因爲我認爲這是更好的選擇。 我可以做灰度與此代碼:
Mat img = imread("test1.jpg", 0);
uchar* p;
Mat lookUpTable(1, 256, CV_8U);
p = lookUpTable.data;
for(int i = 0; i < 256; ++i)
p[i] = 16 * (i/16)
LUT(img, lookUpTable, reduced);
原:
退色:
,但如果我試圖用顏色做我得到了奇怪的結果..
與此代碼:
imgColor = imread("test1.jpg");
Mat reducedColor;
int n = 16;
for (int i=0; i<256; i++) {
uchar value = floor(i/n) * n;
cout << (int)value << endl;
lut.at<Vec3b>(i)[2]= (value >> 16) & 0xff;
lut.at<Vec3b>(i)[1]= (value >> 8) & 0xff;
lut.at<Vec3b>(i)[0]= value & 0xff;
}
LUT(imgColor, lut, reducedColor);
從哪裏我可以得到LUT的完整理解和使用?我看到了opencv文檔,但它對語法非常嚴格。如果要保存此「LUT圖像」的值並想將其應用於其他相同的值,您該做什麼 – AHF 2014-05-19 22:06:16
LUT的目的是根據查找表更改圖像的顏色。這可能有多種目的,如降低顏色分辨率作爲圖像分割中的預處理步驟。有關其他信息,請參見此維基百科文章:http://en.wikipedia.org/wiki/Colour_look-up_table – xperroni 2014-05-20 02:02:54
至於對不同的圖像應用相同的LUT轉換,您可以修改上面的'colorReduce()'函數以接受引用查找表作爲參數,然後在單獨調用'lookupTable()'或其他您認爲合適的方法的情況下計算表。 – xperroni 2014-05-20 02:04:19