Я пару дней играл с opencv2, реализованным на C++, и заметил, что таблицы поиска — это самый быстрый способ применить изменения к изображению. Однако у меня возникли некоторые проблемы с их использованием для моих целей.
В приведенном ниже коде показан пример инвертирования значений пикселей :
bool apply(Image& img) {
int dim(256);
Mat lut(1, &dim, CV_8U);
for (int i=0; i<256; i++)
lut.at(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.
Я некоторое время искал в сети, но не мог найти правильного решения. Насколько я знаю, это возможно(документация)но я не могу найти способ реализовать это.