LUT для разных каналов на C++, opencv2

Я пару дней играл с 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.

Я некоторое время искал в сети, но не мог найти правильного решения. Насколько я знаю, это возможно(документация)но я не могу найти способ реализовать это.

5
задан Michal B 16 July 2012 в 11:22
поделиться