BGRからRGB変換をNumpy で実施
my_img_bgr = cv2.imread('mika.jpg') bgr_inverse = my_img_bgr[:, :, ::-1] bgr_inverse
画像の保存
トリミング
トリミングはNumpy 配列の操作で行います。
つまり、Numpyのスライシングでトリミングが行えます。
画像のデータはピクセル単位で色情報か濃度の情報が入ったものがNumpy配列で構成されています。
画像の必要な部分だけを切り取りたい場合には、Numpy配列をスライシングすればいいことになります。
Numpyのスライシングについてはこちらのページを参考にしてください。
shapeプロパティで画像データの形態を確認すると、高さ、幅、色の順番にデータが格納されているのがわかります。
データの形態がわかったら、高さと幅のデータを取り出して加工します。
高さと幅に対して次のようにスライシングします。
mika_rgb[:size[0]//2,:size[1]//2]
:size[0]//2のコロンはスライシング範囲のコロンです。
コロンの前が省略されていますが本来は0が入ります。
size[0]はshapeプロパティで取った高さの値が入ります。
size[1]はshapeプロパティで取った幅の値が入ります。
つまり、「:size[0]//2」は上端から縦半分の位置までの範囲を表します。
また、「:size[1]//2」は左端から横半分の位置までの範囲を表します。
普通に画像の表示
# 画像の読み込みとBGRをRGBに変換 mika_bgr = cv2.imread('mika.jpg') mika_rgb = cv2.cvtColor(mika_bgr, cv2.COLOR_BGR2RGB) size = mika_rgb.shape print(size) plt.imshow(mika_rgb) plt.show()
トリミング
左半分上半分を表示
mika_trimming1 = mika_rgb[:size[0]//2,: size[1]//2] print(mika_trimming1.shape) plt.imshow(mika_trimming1); plt.show()
右半分下半分を表示
mika_trimming2 = mika_rgb[size[0]//2 :, size[1]//2 :] print(mika_trimming2.shape) plt.imshow(mika_trimming2); plt.show()
リサイズ
リサイズをする場合はNumpy配列の操作でもできますが、通常は簡単なメソッドが用意されていますので cv2.resize メソッドを使います。
リサイズのメソッドは次のようになっています。
fx: x 方向の倍率
fy: y 方向の倍率
interpolation: 補完方法
cv2.INTER_NEAREST: 最近傍補間
cv2.INTER_LINEAR: バイリニア補間 (デフォルト)
cv2.INTER_CUBIC: バイキュービック補間
cv2.INTER_AREA: ピクセル領域の関係を利用したリサンプリング
cv2.INTER_LANCZOS4: Lanczos 補間
デフォルトのバイリニア補完より、cv2.INTER_AREAの方がより自然な場合もありますので色々試すと良いでしょう。
mika_rgb = cv2.cvtColor(mika_bgr, cv2.COLOR_BGR2RGB) size = mika_rgb.shape print('サイズ:', size) new_size = (size[1]*2, size[0]*2) #新しいサイズ resized_img = cv2.resize(mika_rgb, new_size) print('新しいサイズ:', resized_img.shape) plt.imshow(resized_img); plt.show()
参考になった書籍
OpenCVというよりも、画像認識の理論面が幅広く数式を使って説明されています。画像分析を自分のものにしたい場合に最適です。
Pythonサンプルのダウンロード
ここでダウンロードする「opencv_basic.ipynb」ファイルは、このPython動画で使用したものです。
コメントを投稿するにはログインしてください。