この広告は、90日以上更新していないブログに表示しています。技術OpenCVに関しての記事をいくつか書いてきましたが、今回は単純に作ったものの公開になります。Lab色空間に関しての復習がてら書いていきます。今回作るもの入力画像に対して、Lab画像への変換を行い、それに対して閾値処理行う。その結果を可視化し、任意の状態のパラメータを保存する。色空間の座標を非線形に圧縮したものに基づいている。RGBやCMYKとは異なり、Lab色空間は人間の視覚を近似するよう設計されている。知覚的均等性を重視しており、L成分値は人間の明度の知覚と極めて近い。成分で表現したり、コントラストの調整のためにL成分を使ったりといった利用が可能である。https://ja.wikipedia.org/wiki/Lab%E8%89%B2%E7%A9%BA%E9%96%93引用元に色々書いてありますが・人間の感覚に合わせて考案されたよ・環境光の影響を受けにくいらしいよって感じです。コードinclude文等省略。0;}細かく見ていくでは細分化して細かく見ていきましょう。(-1);}パラメータを記録する出力ファイルを保持する変数を宣言。画像の入力を処理を行なっています。255);ウィンドウ生成したのちトラックバーの生成を行なっています。トラックバーをスライドさせることでLab画像のaチャンネルとbチャンネルの閾値をいじることが目的です。planes);RGB画像である入力をcvtColorでLabに変換します。opencv.jpその後、cv::splitで(名前的に間違えやすいけど文字列操作ではないです)3チャンネルであるLab画像のシングルチャンネルの配列に分割します。result);無限ループ内の処理。thresholdで閾値処理をします。それ以外は0閾値はトラックバーをいじることで可変するため、任意の閾値を設定し処理を行います。閾値処理により、それぞれのチャンネルごとで下限の閾値を下回る値を0にし,その後上限の閾値を下回る値を255にします。この処理により、得たい範囲内の値をもつ要素のみが255の値をもつ配列が得られます。b_img)言い換えれば、任意の範囲内の値をもつ部分が白色となる輝度画像がチャンネルごとに得られます。この二つに対して、bitwise_andで論理積をとり、マスク処理を行うためのマスク画像(表示したい部分のみを白色とする画像)を生成します。出力)マスク画像マスク処理を行う際にはcopyToを使います。endl;Enterが押したら保存するよってだけ。さいごにミドラーシュの髪の部分とか緑の部分だけ抜きたかったんですけど、うまく取れてないっていう......。Labで試してみましたが、カードみたいなものだとHSVで十分そうです。本来は黄色の物体を抜きたかったときに色々試していた中で作られたものです。Labだと緑と黄色が近いので割と一緒に取られてしまうことが多く、パラメータを吟味したくて作りました。Labは環境光の影響を受けにくいって聞いたんですが、ほんとなんですかね......。