2019.01.08見習いヒストグラムとはなんですか?管理人ヒストグラムとは、画像内の画素値の度数分布を表したものです。見習い・・・度数?分布?管理人つまり、画素値0〜255まで、どの画素値が何個あるかを表したグラフのことです。元の画像ヒストグラムヒストグラムとはヒストグラムは、画像内の画素値の度数分布を表したもので、画像の大まかな特徴や偏りを調べるためのものです。出典:https://www.pakutaso.com/20181100333post-18689.htmlこのように雲や空などが大部分を占める明るい画像だと、ヒストグラムはこのようになります。左から右に、0〜255となっていくのですが、このヒストグラムを見ると255に近い画素値がかなり多いことがわかります。逆に暗い画像だと、左(0に近い方向)に山が集中します。いった風に画像の特徴を知ることができる、それがヒストグラムです。解説ヒストグラムを作成する際は、画像として作成するので、まず最初に画像配列を作成します。画像配列は「numpy.ndarray」型となるので、「numpy」の「zeros」関数で、初期値「0」の画像配列を作成します。次に、「calcHist」関数を使って度数分布を求めていきます。第1引数:ソース画像配列。「[]」で括ることによって、画像配列データとして認識させる。具体的には、「numpy.ndarray」型から「list」型へ変換する。第2引数:チャンネルの種類。[0]なら青、[1]なら緑、[2]なら赤を調べる。ソース画像がグレースケールなら[0]を指定する。第3引数:マスク画像。マスク画像を指定しない場合は、「None」を指定する。第4引数:ビン(階級)の数。今回は全画素値を調べるので、[256]を指定。第5引数:計測する画素値の範囲。「calcHist」関数で返ってくる値は「numpy.ndarray」型で、256個の配列の中に各画素値の度数が代入されています。見習い例えば配列番号「120」には、画素値120の数が代入されているということですか?管理人その通りです。「hist」変数には256×1の二次元配列に、それぞれの度数が代入されています。ヒストグラムが取得できたら、描画に移ります。今回は「line」関数で縦線を256本描画して、棒グラフを作成していきます。「line」関数の引数には、描画対象となる画像と、始点・終点、そして線の色が入ります。見習いさっきは[0]を指定したから、青チャンネルの度数分布を調べてことになりますね。今度は3つのチャンネル全てを調べて、画像の特徴を掴んでみましょう。見習いでも棒グラフだと重なって、他のチャンネルが見えなくなるのでは?管理人いい質問です。今度は折れ線グラフで描画してみましょう。注目は「zeros」関数内の第1引数です。3]と指定しています。この「3」は、3チャンネル分のことを表しており、「100×256」の画像が青緑赤の3チャンネル分作成されます。ヒストグラムの取得や描画作業も、3チャンネルあるので、3回行っています。その際に、調べるチャンネルや線の色をチャンネル毎に変更します。(マーカー部分)見習いヒストグラムを見ると、画像全体が赤みがかっていることがわかりますね!管理人いい視点ですね。見習いとなると、もし青空の画像で行ったら青チャンネルが右に偏りそうね。試してみるといいかもしれませんね。元の画像(https://www.pakutaso.com/20190134018post-17712.html)ヒストグラム全体的に暗い画像であることが言えます。青みがかっているというよりかは、黒に近いので「RGB」間での偏りは無いと言えます。入道崎に沈む夕陽とレイライン元の画像(https://www.pakutaso.com/20190152014post-18745.html)ヒストグラム夕焼けによって、「R(赤)」の値が極端に右に寄っています。オレンジがかった色が多いので、「G(緑)」の値も多少の偏りを見せています。見習いオレンジは「明るい赤」と「暗い緑」で表現できますからね。元の画像(https://www.pakutaso.com/20181135332post-18677.html)ヒストグラム緑だけが偏ると思いきや、「B(青)」が一番偏っていることがわかります。これは靄(もや)の部分を表現するのに、青の成分を多く使っているからだと考えられます。このようにヒストグラムを用いることで、感覚だけではわからない画像の特徴を正確に知ることができます。LINEIT系だんしをフォローするIT系だんし関連記事Python【OpenCV】笑顔シャッター機能を作る【Python】OpenCVを使った機能として、顔認識や目の認識などがありますが、こういったものを応用して「笑顔シャッター機能」を作ってみたいと思います。普通の「顔認識機能」を作っていきます。普通に顔認識を行なっていきます。速度が遅いので、100カウント分のデータを取ることにします。実際に算出した平均値のデータは、「51.94ms」となりました。上記の画像では、特定の画素とその周りの8つの画素との画素値の差が示されています。2つの画像はフリー画像ですので、ご自由にダウンロードしてください。今回はこの2つの画像を使用します。前提として、画像の幾何学変換では以下の数式が成り立ちます。aPython【OpenCV】マスク処理を使って、画像を重ね合わせる【Python】マスク処理を行えば、画像を重ね合わせることができます。この2つの画像を重ね合わせます。すると、このように合成されます。これがマスク処理です。コメントをキャンセルメールアドレスが公開されることはありません。R1カテゴリーJavaJavaFXJavaScriptPythonRこのサイトの管理人IT系だんしプログラミングが大好きな人。趣味でゲームやツール製作をしながら、プログラミング記事を書き続けています。