I have been playing with opencv2 implemented in C ++ for several days and have noticed that lookup tables are the fastest way to apply changes to an image. However, I had some problems using them for my purposes.
The code below shows an example of inverting pixel values:
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;
...
};
Since it is very efficient, much more efficient than changing each pixel by one (verified by my own tests), I would like to use this method for other operations. However, for this I have to access each layer (each color, image in BGR) separately. For example, I would like to change blue to 255-i, green to 255-i / 2 and red to 255-i / 3.
, . , (documentation), .