【Python】OpenCVでエッジ検出 – Canny法

Pythonの応用
スポンサーリンク

初心者の独学でのプログラミング学習はとてもツライ…

プログラミングをマスターしたい!

今のIT業界はプログラミングエンジニアが不足していると言われています。
高収入の職業とも言われる分野もありますし、AI、機械学習、ディープラーニング、IOTといった注目される分野が目白押しです。

でも、いざ初心者がプログラミングをマスターしようとすると…

  • 本を読んだりネットの記事で自力で勉強しているけど限界を感じる
  • プログラミングスクールに定期的に通うのは面倒だ
  • 地方に住んでると家の近くにプログラミングスクールなんてない
  • どのプログラミング言語を学べばいいのか悩む
  • 実際の就職や転職にプログラミングが活かせるのか心配だ

など、プログラミングを自分で勉強しようとすると悩みが尽きません。

プログラミングに詳しい友人に教えてもらおうと思っても、そんな友人なんて滅多にいません。いたとしても細かく教えてくれるほど時間に余裕がある人はいないでしょう。

そんな独学でプログラミングをマスターするのに限界を感じてる方に、オンラインプログラミングスクールをがおすすめです。

おすすめのオンラインスクールはこちら

OpenCVを使ったPythonでの画像処理について、ここではエッジ検出(Edge Detection)について扱っていきます。

エッジ検出とは画像から端の枠線を取り出す手法です。ここではその代表的な手法であるCannyエッジ検出を扱います。

このCanny法は、ガウシアンフィルタで画像を平滑化してノイズを除去し、sobelフィルタでエッジの勾配の大きさと方向を求め、勾配方向と大きさを元に細線化することでエッジと無関係の部分を取り除き、 閾値化でエッジを検出するという流れです。OpenCVを使えばこれらを一度の処理で行えます。

ではエッジ検出を行っていきましょう。

スポンサーリンク

Cannyエッジ検出

エッジ検出のCanny法はCanny()で処理は簡単に行えます。

jupyter notebookを使って処理をしていきたいと思います。まずは各種ライブラリのインポートです。

これはおきまりのインポート。

ここで使う画像を読み込みます。

imread()で画像を読み込み、imshow()で表示します。

カラーは変換していません。グレースケールで読み込んでも良いと思います。

Canny()を使ってエッジ検出をしてみます。

Canny()に画像を渡し、第2、第3引数に閾値を渡します。最小値、最大値の閾値を渡しますが、ここではどちらも0と255の中間である127を設定してみました。

imshow()で画像を表示します。

閾値を変えて再度処理してみます。

閾値を0と255の両端の値をここでは使って検出してみます。

この閾値の最小値と最大値を調整していけばエッジの表現が変わっていくということになります。

そこで、画像の画素データの中央値をnp.median()を使って求めて、そこから閾値を調整してみることにします。

median()を使って中央値を求めます。閾値の下限の値をmax()を使って、0か中央値の70%の値を指定してみます。上限は255か中央値の30%増しの値を指定してみます。

先ほど求めたlowerとupperをCanny()に渡しして検出してみます。

多少違っているのはわかりますね。でも境界をはっきりさせるにはもう少し別の処理も加える必要もあるようです。

ここで、ぼかし処理も加えてみます。小さなエッジは境界を捉えるのに不要でもあるので、それにはぼかしが役に立ってきます。

ぼかし、画面の平滑化についてはこちらで扱いました。

【Python】OpenCVで画像のぼかしと平滑化
OpenCVを使ってPythonで画像を処理する方法について、ぼかしや平滑化について扱います。filter2D()、blur()、GaussianBlur()、medianBlur()、bilateralFilter()の処理を見て行きます。

ここではblur()を使ってみます。

blur()で使う箱型フィルタのカーネルサイズは5×5にしてみました。このぼかし処理を行った画像をCanny()で処理しています。

表示するとこうなります。

だいぶ境界が出てくるようになりました。

あとは色々と閾値を操作して最終的なエッジ検出の画像を求めるだけです。カーネルサイズを7×7などにしてみるのもいいでしょう。

ここではupperの値に50を加えてやってみます。

だいぶエッジ検出らしくはなったとは思います。扱う画像によって違ってくるので、色々と数字を調整して試してみることが必要ですね。

スポンサーリンク

最後に

ここではOpenCVを使ったPythonでの画像処理について、ここではエッジ検出(Edge Detection)について扱いました。

エッジ検出とは画像から対象の端の枠線を取り出す手法で、その代表的な手法であるCannyエッジ検出をここでは触れました。

フィルターや閾値を操作して、目的の検出ができるように色々と試していく必要があります。

自宅学習はオンラインプログラミングスクールを活用!

自宅学習にはオンラインプログラミングスクールがおすすめ!

オンラインプログラミングスクールは独学でプログラミングを学習する時のデメリットを解消する仕組みが備わっています。

気になるところは…

学習がオンラインで完結するのはもちろんですが、独学ではできない質問サポートがあるかどうか。わからないことを現役のエンジニアが質問に答えてくれるといいですよね。

受講者個人に担当のメンターがつき、マンツーマンで学習の相談に乗ってくれることも必要で、ITエンジニアの世界についても伺えたりもすると幅が広がります。

オンライン面談だけでなく、チャット機能を使って気軽に質問を投げかけることができることも大切です。

また、オリジナルプロダクトの開発とサポートがコースの中に組み込まれていて、独学ではなかなか難しい実践的なスキルの習得にもつなげたい。

プログラミングをマスターした後の実際の仕事につながる転職サポートでがあると、ITエンジニアの世界に飛び込むのに不安が解消されます。

そんな豊富なメニューが揃っているおすすめのオンラインプログラミングスクールがこちらにあります。

おすすめのオンラインプログラミングスクールはこちら

TechAcademyはおすすめのオンラインプログラミングスクール!

オンラインのプログラミングスクールでは、テックアカデミーの充実度が目を見張ります。

オンラインで受講が完結するので、自宅学習でプログラミングをマスターしたい人にはテックアカデミーがおすすめです。

メンター制度も現役のプロが対応してくれます。大学生などが対応しているスクールに比べて本気度と専門性が違います。メンター制度の無いスクールもありますし、担当では無いメンターが対応するスクールもあったりするので、相談の質が違いますね。

チャットサポートもあるので、それが無いスクールに比べて相談の気軽さの違いがあります。

プロダクト開発のサポートで実践力が養われるだけでなく、どの講座を利用しても転職サポートが受けられるのはありがたい。

用意されているコースも、初心者向けのプログラミングコースから、Python、Java、PHP、iPhoneアプリ、AndroidといったITエンジニアのベースとなる主要な言語だけでなく、AI、データサイエンス、ブロックチェーン、webアプリケーションと行った実践的なコースまで用意しています。

他にも、webデザインやUI/UXデザイン、動画編集、webディレクションやwebマーケティングといったプログラミング以外での役立つコースまであります。

このようなたくさんの選択肢から自分にあったコースを選ぶことがでるのがテックアカデミーです。

コースの期間も短期間でマスターしたり、長期の受講でじっくり取り組むコースを選ぶこともできます。

複数講座のセットコースを利用することで大幅な割引が受けらるので、お得に受講することもできます。

無料体験もありますので、プログラミング学習でオンラインスクールを考えている人はTechAcademyをぜひ利用してみてください。

テックアカデミーの公式サイトはこちら

タイトルとURLをコピーしました