OpenCV NumpyでRGB変換、トリミング

AI
OpenCV numpyで操作
スポンサーリンク

BGRからRGB変換をNumpy で実施

my_img_bgr = cv2.imread('mika.jpg')
bgr_inverse = my_img_bgr[:, :, ::-1]
bgr_inverse

画像の保存

cv2.imwrite(‘mika_gray.jpg’,my_img_gray)

トリミング

トリミングは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 メソッドを使います。
リサイズのメソッドは次のようになっています。

縦横比固定のリサイズは、第1引数が画像のソース、第2引数が新しいサイズになります。 cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

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動画で使用したものです。

opencv_basic.ipynb

OpenCV動画一覧

タイトルとURLをコピーしました