「OpenCV(オープンシーブイ)」とは、
画像処理や画像認識、動画編集などを、手軽にサクッと実行できるライブラリです。
画像処理や画像認識で必要となる、多くのアルゴリズムが用意されています。
OpenCVを使うことでゼロから実装する必要がないので、
ご希望の処理をサクッと実現できます。
すぐに美味しいご飯が食べたい時、冷凍食品は便利ですよね。
電子レンジでチンすれば、出来てしまいます。
OpenCVは、サクッと、ご希望の画像処理等を実現してくれるライブラリになります。
とはいっても、OpenCV 初心者の方などは
- OpenCV とは?
- OpenCV のダウンロード、インストールなど環境構築は、どうすればいいの?
- OpenCV の使い方は?
といった疑問を持たれる方も多いかと思います。
そこで本記事では、
- OpenCV とは何かわかる
- OpenCVの環境構築方法がわかる
- 画像処理、画像認識、それらを使った動画処理のプログラミングを学べる
といったおすすめの本をご紹介します。
本記事の概要
OpenCV で画像処理・画像認識・動画編集などにサクッと入門したいあなたにおすすめの本、参考書はこちらです 【OpenCV 本 おすすめ C++】
OpenCVってなに?
「OpenCV」 は、処理プログラムの集まり(ライブラリ)です。
主に画像処理や画像認識、動画処理などのプログラムがあります。
無料(フリー)でオープンソースの画像処理ソフトなので、
誰でも手軽に試すことができます。
ちなみに、OpenCVは、
Open Source Computer Vision Library オープンソース コンピュータビジョン ライブラリの略になっています。
もともとはインテルが開発していて(元はC言語やC++)、
その後、オープンソースとして公開されたので、
信頼できるソフトとなっています。
現在では、Python や Java など、
多くの他言語からも使えるようになっています。
Python は現在人気のプログラミング言語の1つです。
OpenCV はPythonから呼び出して使うことも可能です。
詳しくはこちらの記事もどうぞ↓
『画像処理をPythonで学びたいあなたにおすすめの書籍はこちらをどうぞ【aiやopenCVもどうぞ】』
OpenCV を使うことで「画像認識」(ディープラーニングなどの人工知能、機械学習技術などで活用)についても、
非常に簡潔に実装が可能です。
Web制作や動画編集などでは、
ご希望の処理は特定のソフトを使って実行している方も多いかと思うのですが、
OpenCV を活用することで、あなたのご希望の処理を自動化できる可能性があり、
自動化できれば、作業の効率化と、より多くの時間と余裕を手に入れることができる可能性があります。
- OpenCVを使ってみたい!
というあなたには、OpenCVを、C++で実装してみるのがおすすめです(理由は以下で説明しますね)。
その際に参考になるのがこちらの1冊です↓
OpenCV4基本プログラミング―さらに進化した画像処理ライブラリの定番
本書はOpenCVについて、
- インストールなどの環境構築から丁寧に解説
- 使い方をそれぞれ図や実装例を示し、わかりやすく説明
してくれており、初心者でもわかりやすい本です。
OpenCVを呼び出して使う場合には、
例えば、PythonやJavaなどの他の言語からでもオッケーです。
- 呼び出して使うってどういうこと?
ってとこですが、
自前で持ってないけど、同様の機能を
- 他に任せて使わせてもらう
という感じになります。
イメージとしては、
- 近所のコンビニを自分の冷蔵庫がわりにする
といった感じです。
Pythonのプログラムで画像処理をしたいときに、
- OpenCVさんに頼んで、代わりに処理をしてもらう
という感じになります。
ただ、画像や動画などの処理を実行したいだけならこれでいいのですが、
- OpenCVの中でどんな処理がされてるんだろう?
といった処理の根本的な中身などはブラックボックス状態です。
なにかわからないけど、こうするとこうなる
という状態です。
OpenCV自体はC++で書かれているので、
- OpenCVの中でどんな処理が、どのように実行されているか
も同時に学ぶなら、
- OpenCVをC++で使っていく
のがおすすめです。
なぜなら、C++を理解できると、
OpenCVをC++で使えるだけでなく、
必要があれば、処理の中身について、
ソースコードを読んで、学んで身につけていくこともできるからです。
- いつも冷凍食品だけで食事を作る
としても、美味しいご飯は食べれますが、
- 忙しい時は冷凍食品で食事を作るけど、時間があれば材料から調理して作れる
の方が、より料理スキルは高いですよね。
同様に、
- OpenCVを使いつつ、中身も理解していて、いざとなれば応用的な処理を自分で実装できる
という方がスキルは高いですし、
就職や転職の際には、評価に雲泥の差が出るはずです。
なので、OpenCVを通じてスキルを効率的に高めるなら
おすすめなのがC++になります。
加えて、OpenCVを活用できるメリットとしては、
- 画像処理・画像認識・動画編集などをラクに実行できるようになる
- プログラミング技術が身につく
- 画像や動画の処理の原理を理解するための基礎ができる
といった点が挙げられます。
これらを1冊で実現できるおすすめ本となっています↓
OpenCV4基本プログラミング―さらに進化した画像処理ライブラリの定番
本書は、
- 画像処理・画像認識・動画編集などに使いたい初心者の方
だけでなく、以下の内容で示すような
- 応用的なアプリケーションをサクッとラクに開発したい方
- 負荷の大きい処理をGPUを活用して効率化したい方
といった経験者の方が、さらにスキルアップするためにも役立つ1冊となっています。
以下では、具体的な内容についてご紹介しますね。
第1章 OpenCV 基本概要
OpenCVの基本的な概要(バージョンによる違い等)が丁寧に1章で解説されています。
本書では最新バージョンのOpenCV4の解説がされていますが、
- OpenCV3からの変更点
など、これまで使ってきた方など役立つまとめとなっています。
第2章 初めてOpenCVを使う方向けの最初のプログラム作成
初めてのOpenCVプログラムとして、初学者の方もわかりやすいように、1から解説がされているのが2章になります。
本書で使われている Visual Studio のスクショ画面に沿って操作を行っていくことで、
初学者の方でもつまずかずにOpenCVプログラムをC++で実行できます。
第3章 行列保持クラス(MAT / UMAT)
3章では、画像処理で欠かせない行列データの保持クラス(マトリックスクラス)についての解説があります。
画像データの保持クラスにはMATとUMATがあり、
UMAT を使いこなすことで、GPUを活用できるため、
処理の高速化が望めます。
そのための基礎としてMAT/UMATについての解説がされています。
第4章 OpenCVによるシンプルな座標変換
第4章からは画像処理等の具体的な解説になります。
まず単純な座標変換例として、
- OpenCVによる画像のフリップ
のやり方が示されています。
この機能を使うことで、例えば
- OpenCVで画像を90度回転
といった処理をC++でサクッと実行できます。
もちろん、90度以外の任意の角度で回転させる機能も使えます(アフィン変換を行ってくれます)。
第5章 OpenCVによる図形の扱い方
OpenCVを使うと、
- 図形や文字などの描画
も可能です。
画像上に、図形(円や線、四角形など)や文字を加える
といった方法が第5章で解説されています
。
画像処理や画像認識での前処理としてよくあるのが、グレースケール処理ですが、
- OpenCVではグレースケールをC++でサクッと実行
できます。
また、いくつかの閾値処理が実装されているのですが、
それぞれの手法の違いについて、輝度変化の図とともにわかりやすく解説されています。
あなたが輝度処理を行う際には、
どの処理を行うのがいいかを判断する助けになるはずです。
第7章 OpenCVによる エッジ検出・ノイズ除去など
OpenCVによるエッジ検出やノイズ除去などのC++での実装は、第7章で解説されています。
基本的なフィルタの解説と実装方法を実行例とともに学べるので、初めての方もフィルタの意味を視覚的に理解できます。
また、OpenCVで、画像の膨張や収縮のやり方も解説されており、ノイズ除去や欠損部分を埋める際などに役立てることができます。
第8章 OpenCVによる画像合成
OpenCVによる画像合成をC++で学べるのが第8章になります。
合成というと2枚の異なる画像を1枚に合わせるようなイメージもあるかと思いますが、
それだけでなく、1枚の内での注目部分(Region of Interest)を抽出し、
例えば、その部分だけマスク処理を行ったり、
といった画像合成の処理もあり、
それらの処理のやり方が実例とともに視覚的にもわかりやすく解説されています。
第9章 OpenCVによる動画処理
OpenCVによる動画処理をサクッと実行する方法は9章に解説されています。
パソコンに接続されたカメラから映像を取り出して処理して行く基本のところから丁寧に説明があり、
初めての方でも理解しながら実装していくことができます。
動画処理でも、これ以前の章で扱った画像処理の技術の数々が再び出てきますので、
それぞれの章を見返すことで、理解が深まるはずです。
本章で、動画を取り込んで処理して保存する一連の流れを学べます。
第10章 OpenCVによる物体検出・除去
OpenCVで物体(オブジェクト)の検出や除去のC++による実装方法が学べるのが10章になります。
オブジェクトの検出というと、
例えば、顔の検出が有名な例ではないでしょうか。
スマホで写真を撮る際にも、顔を認識して囲んで表示してくれる機能になります。
画像を適切に処理することで、コンピュータは顔を認識することができます。
この機能はOpenCVを使い、サクッと実装することができます。
また、顔の検出に限らず、
- 目などの特定の部位の検出
- 物体の傷などの検出
などへの応用も可能です。
加えて、オブジェクト検出の動画への応用も解説されています。
- 動画編集って、なぜ、時間がかかるの?
- なぜ、高性能なPCが必要なの?
といった疑問を持つ方も多いのではないでしょうか。
動画は画像の集まりなので、
動画処理では、画像処理をたくさん行う必要があります。
また、それぞれの画像は、点の集まりでできていて、
その点に色などの様々な情報を持っています。
画像処理では各画像の各点の情報について、
様々な演算処理を行っています。
なので、コンピュータの中では、めちゃめちゃ計算をしていることになります。
子どもの頃に夏休みの宿題などで、計算プリントをたくさん解いた記憶がある方も多いかと思います。
- 1枚の画像は、1枚のプリント
- 1つの動画は、夏休みの宿題のプリントがまとまったもの
といった感じになります。
プリント1枚ならサクッと終わっても、夏休み全部の宿題になると時間がかかりますよね。
高性能コンピュータでも、特に動画の処理には時間がかかるイメージを持ってもらえたのではないでしょうか。
- もっと短時間で処理を終わらせることはできないの?
と思われる方も多いかと思います。
- 性能の良いPCを手に入れる
というのは1つの方法ですが、お金がかかります。
一方で、
- 処理を効率化する
という方法であれば、お金はかけずに
効率的に終わらせることができます。
- どうやって処理を効率化するの?
ってとこなんですが、
その方法の1つが、UMATを使う方法になります。
11章で解説がされています。
第11章 UMATによる高速化についてのベンチマーク
- UMATってなに?
については、第3章で解説がされています。
簡単にいうと、
- UMATを使うと、GPUを(勝手に)活用してくれる
というご利益があります。
GPUは画像処理と相性がとてもよく、
GPUを活用することで、処理を効率的に進めることが可能です。
11章では、UMATを使うと、MATと比べて、
実際にどのくらい違うのかが検証されています。
データの大きさごとに、処理時間がどのくらい違うかが様々な場合で図示されています。
UMATを活用する効果が一目瞭然に見て取れます。
また、GPUによる高速化の程度の違いについても調べられており、
近年注目の人工知能でのGPU活用においても理解しておくと役立つ内容となっています。
実際の実装の詳細等については、同著者のこちらの書籍にもございます↓
OpenCL並列プログラミング―マルチコアCPU/GPUのための標準フレームワーク
以後は応用的な話が出てきます。
第13章 オリジナルカーネルの使用など
13章では、OpenCVで独自カーネル(OpenCL)を使う方法が解説されており、
オリジナルなフィルタ処理をしたい方などに役立つ内容となっています。
第14章 OpenCVによる画像比較
14章では、画像の比較についての解説がされ、
画像中に猫が写っているところを検索(画像の中にある(相対的に小さな)一部分を検索する手法:画像検索)について解説されているのが15章になります。
第15章 OpenCVによる画像検索
画像検索ができると、
例えば、多くの人が写っている画像の中に、特定の人(特徴が似ている)を検索するなどの応用ができます。
他にも、製品に傷があるかを、製品画像の中に傷画像が含まれているか、といった方法で傷の検出を行うこともできます。
OpenCVで画像検索の実装がC++で丁寧に解説れています。
画像検索に限らないですが、
これらの考え方は、物体検出などの人工知能技術の基礎となっていますので、
学んでおくとAIの根本的な理解にもつながっていきます。
本章で画像検索の高速化として紹介されている技術も、
画像認識でよく使われている技術なので、
イラストとともに詳しく学べる本書を読むことで、
- 画像認識やそれを使った機械学習・人工知能の論文の理解
の基礎とすることもできます。
私が以前機械学習での画像認識の論文を読んでいたときに、
ここで紹介されている高速化技術に関連する内容を論文中で知ったことがあります。
その内容を理解するために論文を孫引きして理解しようとしたら、苦労したのを覚えています。
もしその時に、先に本書を読んでいたなら、理解が大幅に促進されただろうと思います。
第16章 OpenCVによるトリミングと自動化
16章では、OpenCVによるトリミング(の自動化)が解説されています。
画像加工ソフトはスマホでも手軽に実行できますが、
- より細かく、多数のものを高精度で行う
といった場合や、
- 業務用に加工する
といった場合には、
フォトショップや類似するソフトを使っている方も多いのではないでしょうか。
とはいえ、同じ処理を繰り返し手動で行うのは大変ですよね。
OpenCVを使えば、
- トリミングを自動で実行させることが可能
なので、手動の手間を大幅に効率化することができます。
他にも、特定の部分のみ加工する方法も解説されています。
例えば、目を大きくしたり、小さくしたり、といった処理が解説されています。
ここからはOpenCVを便利に使うという話になります。
OpenCVをコンソールから便利に使う方法
プログラム開発の途中では、
処理結果をインタラクティブに見たい場合もありますよね。
OpenCVでの開発では、コンソールを使うことで、
OpenCVの機能をインタラクティブに活用する方法が基礎から解説されています。
例えば、画像のリサイズを行う時に、
- サイズをプログラム内に記述してプログラム実行
- 画像を確認
という流れだと、微調整を行う時に、何度もプログラムを書き換えないといけませんよね。
こんな時に、コンソールの活用が役立ちます。
画面上にリサイズしたい画像と、コンソールを表示させて、
コンソールからリサイズしたいサイズを入力すると、
写っていた画像がリサイズされて表示される
といったことをインタラクティブに実行できます。
こうすれば微調整もスムーズに実行できて効率的です。
同様に、マウスを使った操作をインタラクティブに画像処理に反映させることも可能です。
例えば、画像中のノイズのようなシミを除去したいときに、
- マウスでシミの部分を囲んで、
- コンソール上で取り除く処理を打ち込み
- OpenCVに実行させて画像に反映させる
といったことができます。
他にも、
- 目の部分をマウスで選択
- コンソール上で拡大する処理を打ちこむ
- OpenCVに実行させ画像に反映させる
といったことも可能です。
こういった機能はスマホのアプリなどで使えると思うのですが、
その仕組みを理解することができるだけでなく、
あなたがスマホアプリを開発したりする際にも活用することができます。
例えば、目の部分を選択し、
- 2人の目を互いに交換した画像を生成する
といった操作も紹介されています。
以前、2人の画像を入力すると、
その2人からの子どもの顔画像はこんな感じ?
といった感じでを画像を表示してくれるアプリ(?)があったように記憶しています。
このアプリの仕組みを想像してみると、
入力された2人の画像から、
- 目と口は1人目
- 鼻と輪郭は2人目
のように、それぞれ顔のパーツを取得して、
画像合成して、新しい画像を子どもの画像として生成しているのかもしれません。
本書の画像処理や画像認識技術を活用することで、
- あなたのアイデア次第で、
- 様々な面白いアプリが作れる
手段を手に入れることができます。
画像処理や画像認識を学ぶと面白い点の1つは、
- 応用範囲がめちゃくちゃ広い
ことで、一度身につけたら一生役に立つ技術と言えます。
加えて、同じ処理はOpenCVで自動化することで、
次からはラクに瞬殺することも可能で、
効率的に作業を進めることができます。
さらに、OpenCVのプログラムを書けるようになると
画像や動画の処理中でなにが行われているのかが理解できるようになります。
中身が理解できれば、応用的な処理を自分で実行できるようになり、スキルの応用も効きやすくなります。
- ライバルとの差別化
- 就職や転職でのアピールポイント
にすることも可能です。
とはいっても、
- プログラムなんて難しい
- 以前挑戦したけど、挫折しちゃった
といった方も多いかと思います。
プログラミング初心者の方にとっては、最初はハードルが高く、挫折しやすいのはその通りだと思います。
しかし慣れてしまえば、
- いろいろな作業がラクに進められる
- 自分のアイデアを形にすることができる
といった大きなメリットが得られ、
時間にも経済的にも余裕が持てる確率が高まるはずです。
登山の途中は苦しくても、頂上に登り切ったら最高!
という状況に似ています。
しかも、プログラミングで身につけたスキル資産は、
一生手元に残り続けます。
ぜひ失敗を恐れずに、何度でも挑戦してみてはいかがでしょうか。
OpenCVに関しては、
プログラミング言語はC++がおすすめなのですが、
そのほかのプログラミング言語、
例えば、Pythonなどの言語から呼び出して使うことも可能です。
使っているうちにより詳しく知りたくなったら、
C++の勉強もかねて、 OpenCVのソースコードをのぞいてみる
といったやり方もおすすめです。
- なぜこうなるんだろう
- どういう処理をしてるんだろう
- わからないことや疑問点を解消したい
といった好奇心を持ちながら勉強を続けていくと、
(負担に感じることなく)自然とスキルも高まっていくかと思います。
何より、自分の書いたプログラムで画像や動画を処理すると、
- 結果がすぐに目に見える形で返ってくる
ので、プログラムを勉強するという点でも飽きずに進めやすくおすすめです。
OpenCVを通じて、(Python)やC++、画像処理・動画処理を学び、
一生もののスキル資産を効率的に積み上げていくならこちらが役立ちます↓
というわけで、本記事では、
OpenCVに入門したいあたなにオススメの本(C++編)をご紹介しました。
画像処理を他書で学んだけど、どうしても難しかった
- もっと基本から説明されているものはないの?
といったあなたには、こちらの本がございます(無料)↓
こちらもございます↓
C++に入門するならこちらもどうぞ↓
こちらの記事もございます↓
『「OpenCV」 とは?OpenCV で画像認識などにサクッと入門したいあなたにおすすめの本、参考書はこちらです 【OpenCV Python 書籍】』
『画像処理をPythonで学びたいあなたにおすすめの書籍はこちらをどうぞ【aiやopenCVもどうぞ】』
『画像処理をサクッと実行できるソフトウェアには何があるの?フリー(無料)ソフトも含めて、サクッとまとめました』
『【画像処理 検定】画像処理エンジニア検定の日程や問題、受験資格、難易度、おすすめの対策本などを知りたいあなたはこちらをどうぞ』
『Pythonを学習し、未経験からバイトや転職に結びつけたいあなたにおすすめの入門書はこちらです』
↓こちら無料で読めます