我想通过颜色深度缩放来减少颜色。使用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