「OpenCV-Python Tutorials」とmahotas

「OpenCV-Python Tutorials」についての訳に関連して、今回はmahotasと比較を行いました。


###**Mahotasとは**

  Pythonを使って画像認識を行うライブラリはいくつかありますが、[mahotas](http://mahotas.readthedocs.org/en/latest/)というライブラリもあります。これも[numpy](http://www.numpy.org/)のデータ形式を使っています。Pythonで画像認識を行っているライブラリには、

- C++での開発結果にPythonバインディングを行っているもの(OpenCV-Python)
- numpyやPythonの枠組みをベースにCython言語を利用して高速化しているもの([scikit-image](http://scikit-image.org/))
- Python用のライブラリであることに専念しつつC++で開発をしているもの

があります。mahotasは、Python用のライブラリであることに専念しつつC++で開発をしているものということです。

mahotas [Why did you not simply contribute to scipy.ndimage or scikits.image?](http://mahotas.readthedocs.org/en/latest/faq.html#why-did-you-not-simply-contribute-to-scipy-ndimage-or-scikits-image)
に、なぜmahotasがscipyやscikit-imageとも別物のライブラリとして存在するのかを、その利用を述べています。


[Python(x,y)][Documentation][Python documentation server]を立ち上げて site-packages からmahotasにアクセスするとmahotasに実装されている全ての関数についての最新の情報を得ることができます。


http://mahotas.readthedocs.org/en/latest/index.html


***
>###**OpenCV入門**

>[OpenCV-Pythonチュートリアル入門](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_setup/py_intro/py_intro.html#intro)

>![Intro_1](http://docs.opencv.org/3.0-beta/_images/opencv_logo.jpg)	OpenCV-Pythonを始めてみよう

>[OpenCV-PythonをWindowsにインストールする](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_setup/py_setup_in_windows/py_setup_in_windows.html#install-opencv-python-in-windows)
>![Install_1](http://docs.opencv.org/3.0-beta/_images/windows_logo.jpg)	OpenCVをwindowsで使えるようにする。

>[OpenCV-PythonをFedoraにインストールする](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_setup/py_setup_in_fedora/py_setup_in_fedora.html#install-opencv-python-in-fedora)

>![Install_2](http://docs.opencv.org/3.0-beta/_images/fedora_logo.jpg)	OpenCVをFedoraで使えるようにする。

WindowsでPython(x,y)をご利用の場合にはまず、
\>\>\> import mahotas
を試してみてください。エラーが生じなければ、既にmahotasがPython(x,y)の標準のプラグインとしてインストールされていることが確認されたことになります。
もしエラーを生じたときには、コンパイル済みのpythonモジュールを配布している [Christoph Gohlkeのサイト]
(http://www.lfd.uci.edu/~gohlke/pythonlibs/)からインストールするのがいいでしょう。
VisualStudioでソースコードからコンパイルすることは私はお勧めしません(注１)
Mahotasのインストール方法はMahotasのサイトで次のように示されています。

mahotas [How To Install Mahotas](http://mahotas.readthedocs.org/en/latest/install.html)

***

>###**OpenCVでのGUIの特色**
>[画像操作を始めてみよう](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_image_display/py_image_display.html#py-display-image)
![gui_1](http://docs.opencv.org/3.0-beta/_images/image_display.jpg)画像を読み込むこと、表示すること、保存することを学びます。


>[動画操作を始めてみよう](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video)
![gui_2](http://docs.opencv.org/3.0-beta/_images/video_display.jpg) 動画の再生、カメラからの動画のキャプチャと動画としての保存を学びましょう。


>[OpenCVの描画関数](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_drawing_functions/py_drawing_functions.html#drawing-functions)
![gui_5](http://docs.opencv.org/3.0-beta/_images/drawing1.jpg)	直線、矩形、楕円、円などをOpenCVを使って描画することを学びます。

>[マウスをペイントブラシとして使う](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_mouse_handling/py_mouse_handling.html#mouse-handling)
![gui_3](http://docs.opencv.org/3.0-beta/_images/mouse_drawing.jpg)	マウスを使って塗りつぶし

>[Trackbarをカラーパレットとして使う](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_trackbar/py_trackbar.html#trackbar)
![gui_4](http://docs.opencv.org/3.0-beta/_images/trackbar.jpg)	パラメータを制御するためのtrackbarを作る

***
>###**コア操作**
[画像への基本操作](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html#basic-ops) 

>![core_1](http://docs.opencv.org/3.0-beta/_images/pixel_ops.jpg)	
画素値を読み取り・編集、画像のROI(region of interest 関心領域)での操作、その他の基本操作を学びます。


「実践　機械学習システム」１０章　コンピュータビジョン・パターン認識
mahotas を使った画像の読み込みが紹介されている。
　ここでも読み込んだ後のデータ形式はnumpy.arrayになっている。
　また関数名もimread()になっている。mahotas.imread(name)は、RGBの順で読み込むので、matplotlibのimshow()で表示するときに相性がよい。(注2)

```.py:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import mahotas as mh
import pylab as plt

img=mh.imread("img_0000.png")

plt.figure(1)
plt.imshow(img)
plt.show()
```


>[画像への算術演算](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_image_arithmetics/py_image_arithmetics.html#image-arithmetics)

>![core_2](http://docs.opencv.org/3.0-beta/_images/image_arithmetic.jpg)	
画像に算術演算を施します。

>[実行性能測定と改良手法]
(http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_optimization/py_optimization.html#optimization-techniques)

>![core_4](http://docs.opencv.org/3.0-beta/_images/speed.jpg)	答を得ることは大切だ。しかし、最速に答を得ることはさらに大切だ。あなたのコードのスピードをチェックし、コードを最適化することなどを学びます。

>[OpenCVにある数学的手法](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_maths_tools/py_maths_tools.html#mathematical-tools)
![core_5](http://docs.opencv.org/3.0-beta/_images/maths_tools.jpg)	PCA(Principal components analysis　主成分分析)、SVD(singular value decomposition　特異値分解)などのOpenCVで提供されている数学的手法のいくつかを学びます。



***


>###**OpenCVでの画像処理**

>[色空間を変更する](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_colorspaces/py_colorspaces.html#converting-colorspaces)
![imgproc_1](http://docs.opencv.org/3.0-beta/_images/colorspace.jpg)	異なる色空間で画像を変換する方法を学びましょう。そして動画で色つきの物体を追跡させてみましょう。



mahotas [Color Space Conversions](http://mahotas.readthedocs.org/en/latest/color.html#color-space-conversions)

mahotasの色空間変換で特徴的なのはセピアへの変換があることでしょうか。OpenCVの色空間の変換が充実していますから、それを補うかたちで使うのがよいでしょう。


lenas = mh.colors.rgb2sepia(lena)

>[画像の幾何変換](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_geometric_transformations/py_geometric_transformations.html#geometric-transformations)
![imgproc_gt](http://docs.opencv.org/3.0-beta/_images/geometric.jpg)　回転、変形などのさまざまな幾何変換を施してみましょう。


>[画像の閾値処理](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_thresholding/py_thresholding.html#thresholding)
![imgproc_2](http://docs.opencv.org/3.0-beta/_images/thresh.jpg)　画像をグローバルしきい値、適応的閾値処理 、大津の２値化などで2値化画像に変換してみましょう。

mahotasにも大津の2値化が含まれています。他の2値化手法 [Riddler-Calvard手法](http://mahotas.readthedocs.org/en/latest/thresholding.html?highlight=riddler)も実装されています。

>[画像の平滑化](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_filtering/py_filtering.html#filtering)
![blurring.png](https://qiita-image-store.s3.amazonaws.com/0/83761/9c1b6cee-7281-148c-5f54-2bf2914f793c.png)　画像をぼかしたり、あつらえたカーネルを用いた画像にフィルタすることを学びます。


>[モルフォロジー変換](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html#morphological-ops)

>![imgproc_12](http://docs.opencv.org/3.0-beta/_images/morphology.jpg)　収縮、膨張、Opening, Closingなどのモル
フォロジー変換について学びます。

膨張、収縮 は OpenCVにもふくまれていますが、条件付きの膨張、収縮はOpenCVには含まれておらず、mahotas
には含まれており、上手に使いこなす価値はありそうです。

mahotas [Dilation & Erosion](http://mahotas.readthedocs.org/en/latest/morphology.html#dilation-erosion)

mahotas [Conditional morphological erosion.](http://mahotas.readthedocs.org/en/latest/api.html?highlight=cerode#mahotas.cerode)

mahotas [Conditional dilation](http://mahotas.readthedocs.org/en/latest/api.html?highlight=cdilate#mahotas.cdilate)

>[画像の勾配](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_gradients/py_gradients.html#gradients)

>![gradient.png](https://qiita-image-store.s3.amazonaws.com/0/83761/24cb2b3d-05a1-6eff-e67a-5d6e36eb537e.png) 画像勾配、エッジなどを見つけてみましょう。

>[Cannyエッジ検出](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_canny/py_canny.html#canny)

>![imgproc_8](http://docs.opencv.org/3.0-beta/_images/canny.jpg)　Cannyエッジ検出を使ってエッジを見つけてみましょう。


mahotas [Sobel エッジ検出](http://mahotas.readthedocs.org/en/latest/api.html?highlight=sobel#mahotas.sobel)

mahotas には、Difference of Gaussian があります。
[Compute edges using the Difference of Gaussian (DoG) operator.](http://mahotas.readthedocs.org/en/latest/api.html?highlight=dog#mahotas.dog)
この微分演算は、SIFT特徴量の計算の手順の中に含まれています。OpenCVには直接的にはDifference of Gaussian がありません。[stackoverflowでその実装の1例](
http://stackoverflow.com/questions/14191967/opencv-efficient-difference-of-gaussian)を見つけて利用してみることができます。



>[画像ピラミッド](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_pyramids/py_pyramids.html#py-pyramids)
![imgproc_14](http://docs.opencv.org/3.0-beta/_images/pyramid.png)　画像ピラミッドとそれを画像混合に使う方法を学びます。


>####**OpenCVでの輪郭処理**

>[輪郭：さあ　始めよう](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html#contours-getting-started)

>![contour_1](http://docs.opencv.org/3.0-beta/_images/contour_starting.jpg)
	輪郭を見つけ描こう

>[輪郭の特徴](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_contours/py_contour_features/py_contour_features.html#contour-features)

>![contour_2](http://docs.opencv.org/3.0-beta/_images/contour_features.jpg)	様々な輪郭の特徴、面積、周囲長、外接矩形（包含矩形）などを見つけることについて学びましょう


OpenCVは間違いなく画像処理や画像認識が一番そろったライブラリですが、Pythonでのバインディングでは、その全ての機能が使える状況には必ずしもなっていません。たとえばラベリングもそのような機能の１つです。現状のOpenCV-Pythonの枠組み(cv2)の中に不足している機能をmahotasなどのライブラリが補うことができます(注3)。


[Labeling Images](http://mahotas.readthedocs.org/en/latest/labeled.html#filtering-regions)


>[輪郭の特性](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_contours/py_contour_properties/py_contour_properties.html#contour-properties)
>![contour_3](http://docs.opencv.org/3.0-beta/_images/contour_properties.jpg)	様々の輪郭の特性、堅実性、平均強度などを見つけることを学びましょう。

>[輪郭：その他の関数](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_contours/py_contours_more_functions/py_contours_more_functions.html#contours-more-functions)

>![contour_4](http://docs.opencv.org/3.0-beta/_images/contour_defects.jpg)	
輪郭の凹状欠損(convexity defects)、点と輪郭の関係(pointPolygonTest)を見つけること、様々な形とマッチングさせることを学びましょう。


mahotas 凸包 [convex hull](http://mahotas.readthedocs.org/en/latest/polygon.html#convex-hull)

>[輪郭の階層](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_contours/py_contours_hierarchy/py_contours_hierarchy.html#contours-hierarchy)

>![contour_5](https://qiita-image-store.s3.amazonaws.com/0/83761/b90b85f0-a046-c666-a427-f9543ed9f836.png)
輪郭の階層について学びましょう。

>[OpenCVでのヒストグラム](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_histograms/py_table_of_contents_histograms/py_table_of_contents_histograms.html#table-of-content-histograms)
![histogram.png](https://qiita-image-store.s3.amazonaws.com/0/83761/a7d76636-fa36-3ea5-93ab-8afecb91d1ef.png)　OpenCVにあるヒストグラムの全て。

>####OpenCV OpenCVでのヒストグラム
[Histograms - 1 : 見つけ、プロットし、解析しよう！！！](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_histograms/py_histogram_begins/py_histogram_begins.html#histograms-getting-started)

>![hist_1](http://docs.opencv.org/3.0-beta/_images/histograms_1d.jpg)	ヒストグラムを見つけ、描画しよう。

>[Histograms - 2: ヒストグラムの平坦化](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_histograms/py_histogram_equalization/py_histogram_equalization.html#py-histogram-equalization)

>![hist_2](http://docs.opencv.org/3.0-beta/_images/histograms_equ.jpg)	よいコントラストの画像を得るためにヒストグラムを平坦化することを学びましょう。

>[Histograms - 3 : 2次元のヒストグラム](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_histograms/py_2d_histogram/py_2d_histogram.html#twod-histogram)

>![hist_3](http://docs.opencv.org/3.0-beta/_images/histograms_2d.jpg)	2次元のヒストグラムを見つけ、プロットすることを学びましょう。

>[Histogram - 4 : ヒストグラム逆投影](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_histograms/py_histogram_backprojection/py_histogram_backprojection.html#histogram-backprojection)

>![hist_4](http://docs.opencv.org/3.0-beta/_images/histograms_bp.jpg)	領域ごとに色づけされた物体にヒストグラム逆投影することを学びます。


>[OpenCVでの画像変換](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_transforms/py_table_of_contents_transforms/py_table_of_contents_transforms.html#table-of-content-transforms)
![imgproc_7](http://docs.opencv.org/3.0-beta/_images/transforms.jpg)　フーリエ変換、コサイン変換などOpenCVにある様々な画像変換に出会ってみましょう。




>[テンプレートマッチング](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_template_matching/py_template_matching.html#py-template-matching)
![imgproc_9](http://docs.opencv.org/3.0-beta/_images/template.jpg)　テンプレートマッチングを用いて画像中から物体を探してみましょう。


mahotas [Match template to image](http://mahotas.readthedocs.org/en/latest/api.html?highlight=template_match#mahotas.template_match)


>[ハフ線変換](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html#py-hough-lines)
![imgproc_10](http://docs.opencv.org/3.0-beta/_images/houghlines.jpg)　画像の中から線を検出してみましょう。


>[ハフ円変換](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html#hough-circles)
![imgproc_11](http://docs.opencv.org/3.0-beta/_images/houghcircles.jpg)　画像の中から円を検出してみましょう。

>[Watershed(分水嶺)アルゴリズムにもとづく画像の領域分割](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_watershed/py_watershed.html#watershed)
>![imgproc_13](http://docs.opencv.org/3.0-beta/_images/watershed.jpg)　Watershed(分水嶺)アルゴリズムで画像の領域分割をしてみましょう。


mahotas [Seeded watershed in n-dimensions]
(http://mahotas.readthedocs.org/en/latest/api.html?highlight=watershed#mahotas.cwatershed)

>[GrabCutアルゴリズムを用いた対話的な前景抽出](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_grabcut/py_grabcut.html#grabcut)

>![imgproc_15](http://docs.opencv.org/3.0-beta/_images/grabcut1.jpg)　GrabCutアルゴリズムでの前景抽出をしてみましょう。


***

>###**特徴量検出と特徴量記述**

>[特徴量を理解する](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_features_meaning/py_features_meaning.html#features-meaning)

>![f2d_1](http://docs.opencv.org/3.0-beta/_images/features_icon.jpg)　その画像の主な特徴はなんだろうか？　見つけられたこれらの特徴はどのように役に立つのか？


>[Harrisコーナー検出](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_features_harris/py_features_harris.html#harris-corners)
![f2d_2](http://docs.opencv.org/3.0-beta/_images/harris_icon.jpg)　ええ、コーナーはよい特徴？　でもどうやって見つけますか？


>[Shi-Tomasiコーナー検出器と画像内の強いコーナー(Good Features to Track)](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_shi_tomasi/py_shi_tomasi.html#shi-tomasi)
![f2d_3](http://docs.opencv.org/3.0-beta/_images/shi_icon.jpg)
Shi-Tomasiコーナー検出の詳細を見てみましょう。

>[SIFT(Scale-Invariant Feature Transform)特徴量への入門](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_sift_intro/py_sift_intro.html#sift-intro)

>![f2d_4](http://docs.opencv.org/3.0-beta/_images/sift_icon.jpg)　Harrisコーナー検出器は、画像の縮尺が変わるときには、十分良いとは言い切れません。　Loweは、縮尺に影響しない特徴を見つけるブレークスルーとなる手法を開発しました。それはSIFT特徴量と呼ばれています。


>[SURF(Speeded-Up Robust Features)特徴量への入門](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_surf_intro/py_surf_intro.html#surf)

>![f2d_5](http://docs.opencv.org/3.0-beta/_images/surf_icon.jpg)　　SIFT特徴量は確かにいい特徴です。しかし、十分速いとは言えません。そこでSURF特徴量と呼ばれる高速化版が作られました。


mahotasにもSURFがあります。
[Speeded-Up Robust Features](http://mahotas.readthedocs.org/en/latest/surf.html)


>[コーナー検出のためのFASTアルゴリズム](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_fast/py_fast.html#fast)
![f2d_06](http://docs.opencv.org/3.0-beta/_images/fast_icon.jpg)　上に示した特徴検出器は全てよいものです。しかし、SLAM(訳注：Simultaneous Localization and Mapping、自己位置推定と環境地図作成を同時に行うこと)のようなリアルタイムの用途に使えるほど十分に速いとは言えません。そこでFASTアルゴリズムの登場です。これは本当に"FAST(速い)"です。


>[BRIEF特徴量(Binary Robust Independent Elementary Features)](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_brief/py_brief.html#brief)
![f2d_07](http://docs.opencv.org/3.0-beta/_images/brief.jpg)　SIFT特徴量は、128個の浮動小数点からなる特徴記述子を用いています。そのような特徴量を数千個あつかうことを考えてごらんなさい。そのときたくさんのメモリーとマッチングのためにたくさんの時間を使
います。特徴量を圧縮して速くすることもできますが、それでも、その特徴量をまず計算しなくてはなりません。そこで、BRIEFが登場で、少ないメモリーで、マッチングが速く、それていて高い認識率のバイナリ記述子を見つける近道を提供します。


>[ORB(Oriented FAST and Rotated BRIEF)特徴量](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_orb/py_orb.html#orb)
![f2d_08](http://docs.opencv.org/3.0-beta/_images/orb.jpg)　SIFT特徴量とSURF特徴量はとてもよく動くのだけれども、あなたの用途の中で使うには毎年数ドル払わなければならないとしたらどうしますか？　それらは特許が成立しているのです。その問題を解決するには、OpenCVの開発者はSIFT特徴量とSURF特徴量への新しい"FREE"な代替品、ORBを思いつきました。


>[特徴量マッチング](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_matcher/py_matcher.html#matcher)
![f2d_09](http://docs.opencv.org/3.0-beta/_images/matching.jpg)　特徴検出器と記述子についてたくさん理解しました。異なる記述子を対応付ける方法を学ぶときです。OpenCVはそのために２つの手法、Brute-Forceマッチング手法とFLANNに基づくマッチング手法です。



>[特徴量マッチングと物体を見つけるためのホモグラフィ](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_feature_homography/py_feature_homography.html#py-feature-homography)
![f2d_10](http://docs.opencv.org/3.0-beta/_images/homography_icon.jpg)　いま特徴量マッチングについて知っているので、複雑な画像中の物体を見つけるためにcalib3dモジュールとともに混ぜ合わせてみましょう。

なめらかな画像と模様のある画像とを区別できるHaralick特徴量がmahotasに含まれています。

SURF特徴量もmahotasに含まれています。
「10.4 局所特徴量による記述」]

mahotas [Local Binary Patterns](http://mahotas.readthedocs.org/en/latest/lbp.html)


***

>###**動画解析**
[平均値シフト(Meanshift)とCamshift追跡](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_video/py_meanshift/py_meanshift.html#meanshift)

>![vdo_1](http://docs.opencv.org/3.0-beta/_images/camshift.jpg) 私たちは既に、色に基づく追跡の例を見ました。それは単純なものです。ここでは、もっとよいアルゴリズムである平均値シフトとその改良版であるCamShiftが対象をどう見つけ追跡するのか見てみましょう。


>[オプティカルフロー]
(http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_video/py_lucas_kanade/py_lucas_kanade.html#lucas-kanade) 
>![vdo_2](http://docs.opencv.org/3.0-beta/_images/opticalflow.jpeg)　重要な概念、オプティカルフローについて学びましょう。それは動画に関連していて、たくさんの用途があります。

>[背景除去](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_video/py_bg_subtraction/py_bg_subtraction.html#py-background-subtraction)

>![vdo_b](http://docs.opencv.org/3.0-beta/_images/background.jpg)　いくつかのアプリケーションでは、物体追跡のように前景を抜き出す必要があります。背景除去は、それらの場合に役立つよく知られた手法です。




***
>###**カメラ校正と3次元再構成**

>[カメラ校正](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_calib3d/py_calibration/py_calibration.html#calibration)
![calib_1](http://docs.opencv.org/3.0-beta/_images/calibration_icon.jpg)　利用しているカメラがどれだけ良いものか試してみましょう。それで撮影した画像に歪みが見られるでしょうか？もしあれば、どう補正しましょうか？


>[姿勢推定](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_calib3d/py_pose/py_pose.html#pose-estimation)
>![calib_2](http://docs.opencv.org/3.0-beta/_images/pose_icon.jpg) calibモジュールを用いてちょっとしたかっこいい3D効果を作るのに役立つ短いセッションです。


>[エピポーラ幾何](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_calib3d/py_epipolar_geometry/py_epipolar_geometry.html#epipolar-geometry)
![calib_3](http://docs.opencv.org/3.0-beta/_images/epipolar_icon.jpg) エピポーラ幾何とエピポーラ制約を理解しましょう。



>[ステレオ画像からの奥行き距離情報](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_calib3d/py_depthmap/py_depthmap.html#py-depthmap)
![calib_4](http://docs.opencv.org/3.0-beta/_images/depthmap_icon.jpg)	2D画像群から奥行き情報を得ます。


>###**機械学習**
>[K-最近傍法](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_ml/py_knn/py_knn_index.html#knn)
![ML_KNN](http://docs.opencv.org/3.0-beta/_images/knnicon.png)	K最近傍法の使い方を学ぶとともに、K最近傍法を用いて手書きの数字認識について学びます。


>[サポート　ベクター　マシン(SVM)](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_ml/py_svm/py_svm_index.html#svm)
![ML_SVM](http://docs.opencv.org/3.0-beta/_images/svmicon.png)	SVMの考え方を理解します



>[K平均法](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_ml/py_kmeans/py_kmeans_index.html#kmeans-clustering)
>![kmeansicon.png](https://qiita-image-store.s3.amazonaws.com/0/83761/369a8dad-ae89-1a49-eeb6-cc473e78366b.png) データをK平均法を用いて一群のクラスターに分類することを学びます。そして、K平均法を用いて色の量子化をすることを学びます。


***
>###**Computational Photography**
ここでは、画像のノイズ除去などのComputational Photographyに関するOpenCVのさまざまな機能について学びます。

>[画像のノイズ除去](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_photo/py_non_local_means/py_non_local_means.html#non-local-means)
![photo_1](http://docs.opencv.org/3.0-beta/_images/nlm_icon1.jpg)	Non-local Meansノイズ除去と呼ばれる画像からノイズを除去する良好な手法を見ていただきます。


>[画像修復](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_photo/py_inpainting/py_inpainting.html#inpainting)
![photo_2](http://docs.opencv.org/3.0-beta/_images/inpainticon.jpg)　たくさんの黒点とひっかきを生じた古い劣化した写真を持っていませんか？それを持ってきて、画像修復と呼ばれる方法でそれらを復元してみましょう。


***
>###**物体検出**
>[Haar カスケード検出器を用いた顔検出](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html#face-detection)
![objdet_1](http://docs.opencv.org/3.0-beta/_images/face_icon.jpg)	Haar カスケード検出器を用いた顔検出




***
>###**OpenCV-Python バインディング**
ここで、OpenCV-Pythonバインディングがどのように作られているのかを学びます。

>[どのようにしてOpenCV-Pythonバインディングは動作しているのか？](http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_bindings/py_bindings_basics/py_bindings_basics.html#bindings-basics)
![bind1](http://docs.opencv.org/3.0-beta/_images/nlm_icon.jpg)	OpenCV-Pythonバインディングがどのように作られているのか学びましょう。




注１：VisualStudioでは使用しているVisualStudio のバージョンをそろえる必要があって、使用する全てのライブラリをビルドしているVisualStudio のバージョンをそろえるのはとても厄介なことになります。
注2：cv2.imread(name)の場合にはBGRの順なので、cv2.cvtColor(img, cv2.COLOR_BGR2RGB)とする必要がある。
注3：cv2でOpenCVのPythonバインディングを実装しているやり方は、OpenCV-Pythonのチュートリアルに書かれている通りです。そのやり方で、バインディングが未実装の関数について実装することがPython、C++の上級者には可能でしょう。そうして、それをOpenCVのコミュニティに寄贈できるのはどんなにすばらしいことでしょう。