質問するログイン新規登録
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

5297閲覧

複数の画像を一括で分割する方法

kntk

総合スコア13

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/07/03 05:53

0

0

前提・実現したいこと

ディレクトリ内にある複数の画像を一括で分割して、別ディレクトリに保存する方法を知りたいです。

発生している問題・エラーメッセージ

1つの画像ファイルに対して分割することはできるのですが、複数の画像を対象としたときのコードがうまく書けません。

該当のソースコード

import cv2 import matplotlib.pyplot as plt import numpy as np import os img = cv2.imread('ファイル名.jpg') h, w, c = img.shape v_split = 2 # 垂直方向の分割数 h_split = 2 # 水平方向の分割数 #均等に分割できないと np.spllt() が使えないので、 除算したときに余りがでないように画像の端数を切り捨てる。 _img = img[:h // v_split * v_split, :w // h_split * h_split] print('{} -> {}'.format(img.shape, _img.shape)) #分割する。 out_imgs = [] for h_img in np.vsplit(_img, v_split): # 垂直方向に分割する。 for v_img in np.hsplit(h_img, h_split): # 水平方向に分割する。 out_imgs.append(v_img) out_imgs = np.array(out_imgs) print(out_imgs.shape) os.makedirs('output', exist_ok=True) for i, img in enumerate(out_imgs): cv2.imwrite(os.path.join('output', '{}.jpg'.format(i)), img)

補足情報(FW/ツールのバージョンなど)

上記コードに追加するような形、もしくは他の方法があればおしえていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/07/03 07:47

os.path や pathlib を利用してはいかがでしょうか。
guest

回答1

0

Python

1import cv2 2import matplotlib.pyplot as plt 3import numpy as np 4import os 5# ** img にイメージが入る。まずは 'ファイル名.jpg' が、複数指定できる方法を考える。 6img = cv2.imread('ファイル名.jpg') 7 8# ** ここから下は、「1枚の画像」に対して処理を行っている。 9# ** だから、「1枚の画像」を「外部から指定する方法」を考える。 10# ** すると、上の「ファイルを複数指定できる」から1枚ずつ画像を指定して、 11# ** 複数の画像を一括で処理できる。 12h, w, c = img.shape 13v_split = 2 # 垂直方向の分割数 14h_split = 2 # 水平方向の分割数 15 16#均等に分割できないと np.spllt() が使えないので、 除算したときに余りがでないように画像の端数を切り捨てる。 17_img = img[:h // v_split * v_split, :w // h_split * h_split] 18print('{} -> {}'.format(img.shape, _img.shape)) 19 20#分割する。 21out_imgs = [] 22for h_img in np.vsplit(_img, v_split): # 垂直方向に分割する。 23 for v_img in np.hsplit(h_img, h_split): # 水平方向に分割する。 24 out_imgs.append(v_img) 25out_imgs = np.array(out_imgs) 26print(out_imgs.shape) 27 28os.makedirs('output', exist_ok=True) 29for i, img in enumerate(out_imgs): 30 # ** ここで保存するファイル名を指定しているので、 31 # ** 最初に読み込んだファイルのファイル名をここまで引っ張るなど、 32 # ** ファイル名を作る方法を考える。 33 cv2.imwrite(os.path.join('output', '{}.jpg'.format(i)), img)

投稿2019/07/03 12:18

Q71

総合スコア995

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問