几天来,我一直在玩用 C++ 实现的 opencv2,并注意到查找表是对图像应用更改的最快方法。但是,我在将它们用于我的目的时遇到了一些麻烦。
下面的代码显示了一个反转像素值的示例:
bool apply(Image& img) {
int dim(256);
Mat lut(1, &dim, CV_8U);
for (int i=0; i<256; i++)
lut.at<uchar>(i)= 255-i;
LUT(img.final,lut,img.final);
return true;
}
class Image {
public:
const Mat& original;
Mat final;
...
};
由于它非常高效,比逐个更改每个像素(通过我自己的测试验证)要高效得多,我想将此方法用于其他操作。但是要做到这一点,我必须分别访问每一层(每种颜色,图片在 BGR 中)。例如,我想将蓝色更改为 255-i,将绿色更改为 255-i/2,将红色更改为 255-i/3。
我已经在网上搜索了一段时间,但无法提出正确的解决方案。据我所知,这是可能的(文档),但我找不到实现它的方法。