私は数日間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;
...
};
非常に効率的で、各ピクセルを1つずつ変更するよりもはるかに効率的であるため(私自身のテストで確認済み)、この方法を他の操作に使用したいと思います。ただし、これを行うには、各レイヤー(各色、画像はBGR)に個別にアクセスする必要があります。たとえば、青を255-iに、緑を255-i / 2に、赤を255-i/3に変更したいと思います。
私はしばらくの間ネットを検索してきましたが、正しい解決策を思い付くことができませんでした。私の知る限り、それは可能です(ドキュメント)が、それを実装する方法を見つけることができません。