画像処理を行うためのフリーソフトは多くありますが、望みどおりの機能がないこともあると思います。実はOpenCVを使えば簡単に画像解析プログラムを書くことができます。OpenCVはオープンソースの画像処理ライブラリです。このウェブサイトではOpenCVの環境構築の方法から実際の画像解析の手法まで、ソースコード付きでC++初心者にもわかるように解説しています。

C++開発環境の準備、OpenCVの導入について

VirtualBoxにLinuxをインストールし、OpenCVを導入する方法はこのサイト内で紹介しています。Linuxでの開発は一見すると遠回りのように思えるかもしれませんが、Windowsでの開発は経験上エラーが発生しやすいので、私はお勧めしていません。Macを持っていれば、Macでの開発も可能です。

OpenCVインストール済みLinux
誰でもOpenCVがすぐに使えるようにインストール済みのLinuxイメージです。

LinuxをUSBから起動する
USBメモリにLinuxをインストールする方法を紹介しています。Windowsを手放すことなくLinuxが使えます。

便利なテクニックはたくさんありますが、まずは必須のものから習得していきましょう

C++ OpenCVプログラミングで必須になる事項を解説しています。ある程度C++が使える人は「C++の基本」は読み飛ばしてよいと思います。

C++の基本
OpenCVプログラミングに最低限必要なC++の知識をまとめています。

OpenCVの基本
基礎的なOpenCVの関数を紹介しています。

OpenCV習得への近道

私が勧めているのは、いきなり大きなプログラムを書くのではなく、小さなプログラムから書き始めるという方法です。たとえば、動画処理のプログラムであれば、最初に入力の動画を表示するだけのプログラムを作るのは基本中の基本です。実践編ではチュートリアル形式で小さなプログラムから組み立てていく練習をすることができます。

粒子のカウント
カウント処理は細胞数のカウントなど応用範囲の広い基本的技術です。種子のカウントを例題にしています。

根の長さの測定
長さ、面積などの項目を自動的に測定します。自動化により何千枚もの画像を簡単に解析できるようになるかもしれません。

移動体の追跡
動画を元に移動する物体の座標を自動的に決定し、記録することができれば、速度などさらに高次元の統計量を算出することが可能です。

回転パターンマッチで物体の向きを判定する
パターンマッチングの応用例です。1度ずつ回転し、最もマッチする角度を計算します。

緑色のピクセル数をカウント
各画素の色情報を元に、緑色を判別して数え上げるプログラムを作成します。

空撮動画の解析
ドローンなどにより撮影した動画からドローンの位置や速度を逆計算します。最後には動画からの情報を元に航空写真のようなモザイキングマップを復元します。

オプティカルフロー可視化
OpenCVを用いたオプティカルフローにより、細胞遊走の速度や方向を可視化する方法を解説しています。

移動する物体を追跡する

動画からダンゴムシの動きをトラッキングしています。このチュー…

回転マッチでネジの向きを判定

今回解決したい課題は、ネジの向きの判定です。状況としては、次…

根の長さを測定する

画像から根の長さを測定します。主根と側根で分けて長さを測定す…

粒をカウントする (粒子解析)

画像から種子の数をカウントします。解析の種類としては、一般的…

オプティカルフローの可視化

細胞は変形しながら移動することができます。これを細胞遊走とい…

緑色のピクセルを数える

ニューヨークの衛星画像から領域内の緑色の部分を検出することで…

空撮動画からカメラ位置を推定

空撮動画の解析の流れを示しています。ドローンなどを使って真上…

 

OpenCV小技集

OpenCVを使う上で頻繁に必要になる関数や便利な知識などをまとめています。

連番画像を読み込む

1.png, 2.png, 3.png …..と…

画像をリサイズする

今回は画像をリサイズする方法の紹介です。 imshowの直前…

mean関数でMatの平均輝度を求める

mean関数でMatの平均輝度を求めることができます。また、…

マスク処理で余分な場所を隠す

画像の一部分しか解析に必要ない、除外したいという場合にはマス…

ImageJとOpenCVの比較

OpenCVとImageJ、どちらかが完全というわけではあり…

OpenCVでフーリエ変換

C++とOpenCVを使ってフーリエ変換を行います。フーリエ…

MatとIplImageの間の変換

OpenCV 1系と2系以降では画像または行列の保持に使われ…

厳密な重心の求め方

移動体の追跡や粒子のカウントのチュートリアル中では輪郭構成点…

2値画像の細線化

Zhang-Suenの細線化アルゴリズムを紹介します。このア…

画像処理の目的と水準

画像処理の目的 コンピューターに可能な古典的な画像処理は、人…

画像解析環境の比較

ImageJ、MetaMorph、MATLABなど画像解析が…

顕微鏡画像の扱い方と解析の流れ

顕微鏡で撮影した画像・動画は、顕微鏡メーカーの定めた独自のフ…

mean関数でMatの平均輝度を求める

mean関数でMatの平均輝度を求めることができます。また、…

GoProからリアルタイムに動画を取得

GoProは小さなカメラで、Wifiによってコンピューターと…

ピクセル毎の論理演算 AND NOT OR XOR

Matを入力とする論理演算関数がOpenCVには用意されてい…

画像を足し合わせる

2つのMatを入力に、その和を求めることができます。下の例で…

画像の差の絶対値を計算する

2つのMatを入力に、その差の絶対値を求めることができます。…

一覧はこちら

このウェブサイトはC++初心者がOpenCVを使って実際の問題に対して画像処理技術で解決するときに有用な情報を共有したいという思いで作成しており、生物学を専攻している私が、これまで難儀しながらOpenCVを勉強してきたものを要約して公開しています。お問い合わせはこちらから。