Python初心者のためのOpenCV
では、OpenCVの(opencvのディレクトリ)\sources\samples\python2にあるPythonの例題の実行の仕方を書いた。
OpenCV-Python & Scikit-image -「必見『OpenCV-Python Tutorials』2」への追記
では、Scikit-imageの配布元からの例題のダウンロードと実行の仕方を示した。
「OpenCV-Python Tutorials」と「実践コンピュータビジョン」とscikit-learn
では、scikit-learnの配布元からの例題のダウンロードと実行の仕方を示しました.
これらの例題では、スクリプトとその必要なデータとがセットで含まれているので、使い始めることができます。
OpenCV-PythonやScikit-image, scikit-learnの魅力のため、Pythonに引き寄せられて来る人が増えてきています。
この記事では、Scikit-imageの例題を、ほんの少しだけ改変して、遊んでみるために、Python初心者向けの内容を書いてみます。
####ヒント:入力画像を差し替えてみよう。
参考記事 【シリーズ】「pythonとOpenCVを用いたCVプログラミング 」第8回: OpenCV-python① 画像の入出力と可視化(highGUI))
OpenCV-Python、scikit-image, scikit-learnは全て共通のデータ形式を使っている。そのため、
scikit-imageの例題のスクリプトでの入力データをOpenCV-Pythonのcv2.imread("lena.jpg")などと置き換えることができる。
入力データを差し替えてみると、いろんなことがわかってくる。
課題:
[Normalized Cut]
(http://scikit-image.org/docs/dev/auto_examples/segmentation/plot_ncut.html#example-segmentation-plot-ncut-py)
の例題で、入力画像を変えてみよう。
####ヒント:縮小画像の入力
入力画像の大きさを変えてみよう。
cv2.resize()を検索してください。
python+Opencvによる画像処理5(リサイズ)
cv2.resize()の戻り値が縮小後の画像なので、
関数の入力と出力との区別がつきやすいのがPythonのライブラリの特徴です。
####課題:
[Normalized Cut]
(http://scikit-image.org/docs/dev/auto_examples/segmentation/plot_ncut.html#example-segmentation-plot-ncut-py)
の例題で、入力画像を半分に縮小して動作させてみよう。
####ヒント:部分画像を切り出してみよう。
OpenCV-Pythonや、scikit-image, scikit-learnではいずれも共通のデータ形式を利用している。カラー画像ではimg[y座標, x座標, BGR]の順に添え字を指定します。グレースケール画像ではgray[y座標,x座標]の添え字です。
画像の大きさを知るためには
[h, w] = img.shape[:2]
[h, w] = gray.shape
となります。
y座標の範囲は、最小の値は0で最大値がh-1となります。
x座標の範囲は、最小の値は0で最大値がw-1となります。
subImg = img[yu:yd, xl:xr, :]
としたとき、(yu, yd)の点は部分画像に含まれますが、
ydの位置とxrの位置は、部分画像に含まれないことに留意してください。
###課題:
上記のNormalized Cutで入力画像を部分画像にしてみてください。
###付記:
OpenCV-C++の場合にはcv::Mat のデータ形式を利用しています。
この場合も
cv::Mat img = cv2.imread("lena.jpg", 0);
cv::Matの要素にアクセスするには
最初の添え字がy、次の添え字がxになっています。
このことは、numpy.arrayを使っているOpenCV-Pythonでも、cv::Matを使っているOpenCV-C++でも共通です。
img.at(y,x)