opencvで画像切り抜き
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| opencvで画像切り抜き [2017/11/28] – [OpenCV3で画像の読み込み] adash333 | opencvで画像切り抜き [2018/10/07] (現在) – 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 23: | 行 23: | ||
| 画像データはnumpyのarray(多次元配列)として格納されている | 画像データはnumpyのarray(多次元配列)として格納されている | ||
| - | 入出力の可視化 | ||
| - | 画像の入力は、cv2.imread() → numpy.ndarray型の画像データ | ||
| - | |||
| - | OpencCVの画像データの構造 | ||
| - | カラー画像:(height x width x channels) の3次元配列 | ||
| - | グレー画像:(height x width)の2次元配列 | ||
| まず、Lenna.pngを、https:// | まず、Lenna.pngを、https:// | ||
| 行 53: | 行 47: | ||
| {{: | {{: | ||
| - | + | 以下のコードを入力して、Shift + Enter | |
| < | < | ||
| 行 63: | 行 56: | ||
| print(img.shape) | print(img.shape) | ||
| </ | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | 入出力の可視化\\ | ||
| + | 画像の入力は、cv2.imread() → numpy.ndarray型の画像データ | ||
| + | |||
| + | OpencCVの画像データの構造\\ | ||
| + | カラー画像:(height x width x channels) の3次元配列\\ | ||
| + | グレー画像:(height x width)の2次元配列 | ||
| + | |||
| + | 今回は、hight 512, width 512, channels 3のカラー画像ですので、(512, | ||
| + | |||
| + | 画像をグレースケールで読み込みたい場合は、cv2.imread(' | ||
| + | |||
| + | < | ||
| + | # Lenna.pngを、https:// | ||
| + | |||
| + | import cv2 | ||
| + | # 画像をグレースケールで読み込み | ||
| + | gray = cv2.imread(' | ||
| + | print(gray.shape) | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | ==== 画像データがnumpy配列である利点 ==== | ||
| + | numpy, scipyなどの線形代数関数が、OpenCVでのプログラムでも使用可能\\ | ||
| + | 計算スピードが速い\\ | ||
| + | scikit-learnやtensorflow, | ||
| + | |||
| + | ==== OpenCVのnumpy画像データの注意点 ==== | ||
| + | |||
| + | numpyに慣れる必要あり | ||
| + | |||
| + | matplotlib, PIL, scikit-imageは、RGB画像で保持するのに対して、 | ||
| + | OpenCVはBGR画像がデフォルト(matplotlibで描画するときにカラー変換が必要) | ||
| + | |||
| + | OpenCVの画像は全て numpy.uint8型のnumpy.array | ||
| + | 例えば、scikit-imageでは、グレー画像はnumpy.float64型なので、注意。 | ||
| + | |||
| + | |||
| + | ===== OpenCV3でJupyter Notebook上で画像の表示 ===== | ||
| + | まず、以下のコードをコピペして、Shift + Enterをします。 | ||
| + | |||
| + | < | ||
| + | # 画像の可視化 with Matplotlib | ||
| + | # 簡単だが、各モジュールのカラー画像の保存方法に注意(RGBとBGR) | ||
| + | |||
| + | # matplotlibでJupyter Notebook内で画像表示するためのおまじない | ||
| + | # Jupyter Notebook内で、%をつけて特定のコマンドを入力する方法を、マジックコマンドという | ||
| + | %matplotlib inline | ||
| + | |||
| + | import cv2 | ||
| + | import matplotlib.pyplot as plt | ||
| + | |||
| + | img = cv2.imread(' | ||
| + | plt.imshow(img) | ||
| + | # これだと、色が明らかに変な風に表示されてしまう | ||
| + | </ | ||
| + | |||
| + | 以下のようになりますが、なんか変な色です。 | ||
| + | |||
| + | {{: | ||
| + | |||
| + | これは、OpenCVの画像はデフォルトだとBGR画像であるため、matplotlib(こちらはRGB画像)で正しく表示するためには色変換が必要。 | ||
| + | 具体的には、cv2.cvtColor()関数を用います。 | ||
| + | |||
| + | 以下のコードを入力して、Shift + Enter. | ||
| + | |||
| + | < | ||
| + | %matplotlib inline | ||
| + | |||
| + | import cv2 | ||
| + | import matplotlib.pyplot as plt | ||
| + | # OpenCVの画像はデフォルトだとBGR画像であるため、 | ||
| + | # matplotlib(こちらはRGB画像)で正しく表示するためには色変換が必要 | ||
| + | # 具体的には、cv2.cvtColor()関数を用いる | ||
| + | |||
| + | cvimg = cv2.cvtColor(img, | ||
| + | plt.imshow(cvimg) | ||
| + | </ | ||
| + | |||
| + | ちゃんと普通の色合いになりました。 | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ===== OpenCV3で画像の保存 ===== | ||
| + | 作成中 | ||
| + | |||
| + | ===== OpenCV3で画像の切り抜き ===== | ||
| + | |||
| + | 以下のコードを入力して、Shift + Enter. | ||
| + | |||
| + | < | ||
| + | %matplotlib inline | ||
| + | |||
| + | import cv2 | ||
| + | import matplotlib.pyplot as plt | ||
| + | # OpenCVの画像はデフォルトだとBGR画像であるため、 | ||
| + | # matplotlib(こちらはRGB画像)で正しく表示するためには色変換が必要 | ||
| + | # 具体的には、cv2.cvtColor()関数を用いる | ||
| + | |||
| + | cvimg = cv2.cvtColor(img, | ||
| + | plt.imshow(cvimg) | ||
| + | |||
| + | # 新しい配列に入力画像の一部を代入 | ||
| + | dst = cvimg[0: | ||
| + | plt.imshow(dst) | ||
| + | </ | ||
| + | |||
| + | 以下のように、切り抜かれます。 | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| ==== ソースコード(途中) ==== | ==== ソースコード(途中) ==== | ||
opencvで画像切り抜き.1511876091.txt.gz · 最終更新: 2018/10/07 (外部編集)
