前提・実現したいこと
読み込んだ画像のRGBを調整して
オリジナルのセピア調(青が強い目)を作りたいです。
グレースケールに色をつけるのではなくて
R,G,Bのそれぞれに係数をかけてやりたいです。
string imgPath = @"img\card_00.png"; Mat src = new Mat(imgPath); dst_mult = src.clone() * 2; using (new Window("dst2", WindowMode.AutoSize, dst_mult)) ; dst_mult.ImWrite(imgPath + "_dst_mult.png");
こうすると、
RGBすべてに2を掛けてしまいます。
「Rには1.2,Gには1、Bには0.8」
みたいに掛けてやりたいです。
試したこと
計算速度が劣化するのを覚悟して
Mat dst_mult = src.Clone(); for (int i = 0; i < dst_mult.Height; i++) { for (int j = 0; j < dst_mult.Width; j++) { byte by = 255; Vec3b pix = src.At<Vec3b>(i, j); pix[0] = (byte)(pix[0] * 1.2); //B pix[1] = pix[1]; //G pix[2] = (byte)(pix[2] * 0.8); //R dst_mult.Set<Vec3b>(i, j, pix); } }
という
XY座標を回して、各要素に掛ける方法はうまくいきましたが、
Mat型は行列なので、
行列×行列
というすっきりした形でできないものかと思っています。
多分、計算速度もよくなると思うので
補足情報(FW/ツールのバージョンなど)
C#で使用する予定です。
C#でも使える方法であれば、他の言語で説明いただいても大丈夫です
かなりタイトな処理に入れる予定ですので
計算速度はすごく気になります
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/09 04:19