【Python-OpenCV】画像からランダムに指定サイズで切り抜く方法!

こんにちは、ヒガシです。

 

画像認識系の機械学習を実施する際、既存のデータを加工してデータを水増しすることが有効な場合もあります。

いわゆるData Augmentationってやつですね。

 

このページでは、その水増し手法の一つである、既存の画像データから指定したサイズでランダムに画像を切り抜いていく方法をご紹介していきます。

 

それではさっそくやっていきましょう!

 

スポンサーリンク

作業内容の概要説明

あなたがやりたいことと、このページで紹介する内容が食い違っていてはいけませんので、まずはどのような作業を実施していくかを解説しておきます。

 

作業概要は以下の画像の通りで、ベース画像を指定したサイズでランダムに切り抜き、新しいフォルダに保存するという一連の流れを連続で繰り返すというものです。(繰り返し回数は任意に指定可能)

画像データをランダム切り出しするという作業概要図

 

あなたのやりたいことと内容が一致していればぜひ続きをご覧ください。

 

スポンサーリンク

画像のランダム切り抜きのサンプルコード

それでは早速ですが、サンプルコードのご紹介です。

#ライブラリインポート
import cv2
import os
import random
#読み込む画像ファイル名
pic_name='sample.jpg'
#切り出す画像のサイズ(縦、横)
frame_size=(256,256)
#ベース画像の読み込み
pic=cv2.imread(pic_name)
h,w=pic.shape[:2]
#切り抜き後の画像保存フォルダ作成
dir_name='new_pic_dir'
os.makedirs(dir_name,exist_ok=True)
#連続切り抜き処理
for i in range(10):
    #切り抜く際の始点(左上)
    x=random.randint(0,w-frame_size[1])
    y=random.randint(0,h-frame_size[0])
    #切り抜き処理
    cut_pic=pic[y:y+frame_size[1],x:x+frame_size[0],:]
    #切り抜き画像を保存
    cv2.imwrite(dir_name+'/cut_pic'+str(i).zfill(3)+'.jpg',cut_pic)

 

これでプログラム実行フォルダにあるsample.jpgという画像ファイルを(256,256)のサイズでランダムに場所を変化させながら10回画像を切り抜いてくれます。

 

プログラムにはコメントを付けておりますので、流れが気になる方はぜひ処理を追いかけていてください。

 

※なお、今回のプログラムはカラー画像を対象に書いています。もしモノクロ画像に適用する場合は多少コードを書き換える必要がありますのでご注意ください。

 

スポンサーリンク

サンプルコードの実行結果確認

それでは先ほどのコードを実際に実行してみましょう。

 

まずは実行前のフォルダの中身です。

(cut_pic.pyが先ほどのコードが書かれたファイル、sample.jpgがこれから切り抜くベース画像です。)

サンプルコード実行前のフォルダの中身

それでは実行してみます。

 

なにやら新たなフォルダが出現していますね。

サンプルコード実行後のフォルダの中身

 

そのフォルダの中身を確認してみましょう。

ランダム切り出しした画像を確認した結果

問題なくランダムに画像が切り抜かれていますね。

 

スポンサーリンク

おわりに

というわけで今回はpython-openCVを使って、機械学習におけるデータ水増し処理の一つである、ランダム切り抜きを実演してみました。

 

データ前処理の際などにぜひご活用ください。

 

このように、私のブログでは様々なスキルを紹介しています。

過去記事一覧

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村 IT技術ブログへ
にほんブログ村

それではまた!

コメント

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