質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2007閲覧

4分割された複数組みの画像を一括で結合して元の画像にしたい.

Showthekey37

総合スコア1

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/11 09:52

最近,画像処理にpythonを用いており,分からない事項があったため質問させていただきます.

Google colabratoryで,pythonを使用しています.
現在,以下のようにcをタイル状に結合して元の画像にしています.

from google.colab import drive drive.mount('/content/drive') from PIL import Image data_root = "/content/drive/My Drive/image_div/" # 4つの画像を開く im1 = Image.open(data_root + "1234_1.jpg") im2 = Image.open(data_root + "1234_2.jpg") im3 = Image.open(data_root + "1234_3.jpg") im4 = Image.open(data_root + "1234_4.jpg") # 4つの画像を結合 def get_concat(im1, im2, im3, im4): dst = Image.new('RGB', (im1.width + im2.width, im1.height + im3.height)) dst.paste(im1, (0, 0)) dst.paste(im2, (im1.width, 0)) dst.paste(im3, (0, im1.height)) dst.paste(im4, (im1.width, im1.height)) return dst # 結合した画像を保存 get_concat(im1, im2, im3, im4).save(data_root + "image_cont/1234.jpg") コード

分割された画像ファイル(結合したい画像)は以下のように,ディレクトリにまとまっています.

image_div
├ 1234_1.jpg
├ 1234_2.jpg
├ 1234_3.jpg
├ 1234_4.jpg
├ 1235_1.jpg
├ 1235_2.jpg
├ 1235_3.jpg
├ 1235_4.jpg
├ 1236_1.jpg
└ ...

4分割された画像のファイル名は組み合わせ毎に連番になっていて,後ろにも_1, _2, _3, _4と連番が振られています.結合して復元した画像は,そのファイル名前の前半部分(コード内で1234)をファイル名として保存しています.

少ない枚数であれば,
上のコード内の4分割された画像のファイル名前半部分,結合して復元した画像のファイル名の部分(コード内で1234)を手動で入力してからコードを実行していますが,数百枚の画像に対して同様の処理をする必要があり,一括で効率よく行いたいと考えています.

つまり,Image.openの引数で指定している,読み込みたい4分割された画像(結合したい画像)のファイル名前半部分と,saveの引数で指定している,結合して出来上がった画像の保存したいファイル名は同じであるため(コード内で1234),その部分の指定を自動でおこない,画像の読み込み・結合・保存を,ディレクトリ内にある同様の多数の画像に対して一括にできるようにしたいと考えています.

初めてのプログラミングに関する質問で,稚拙な説明で大変恐縮ですが,
ご助力いただきたいです.よろしくお願いいたします.

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

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

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

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

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

guest

回答2

0

ベストアンサー

以下の方法を使えば、名前の一覧を得ることができます。

python

1>>> import os 2>>> import glob 3>>> jpegs = glob.glob('image_div/*.jpg') 4>>> print(jpegs) 5['image_div\1234_1.jpg', 'image_div\1234_2.jpg', 'image_div\1234_3.jpg', 'image_div\1234_4.jpg', 'image_div\1235_1.jpg', 'image_div\1235_2.jpg', 'image_div\1235_3.jpg', 'image_div\1235_4.jpg', 'image_div\1236_1.jpg', 'image_div\1236_2.jpg', 'image_div\1236_3.jpg', 'image_div\1236_4.jpg'] 6>>> concatnames = {os.path.basename(j)[:4] for j in jpegs} 7>>> print(concatnames) 8{'1236', '1234', '1235'}

投稿2021/08/11 10:19

ppaul

総合スコア24670

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

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

Showthekey37

2021/08/11 13:49

ppaulさま,ありがとうございます. ppaulさまの紹介してくださった方法を組み合わせることで解決いたしました.
guest

0

回答者さまのおかげで解決いたしました.
ビギナーなので少し複雑なコードかもしれませんが,最終的に以下のコードで動作しました.

import

1import glob 2from PIL import Image 3 4#GoogleDriveディレクトリ移動 5%cd "/content/drive/My Drive/image_div" 6 7# ディレクト内の画像リスト表示&並べ替え 8jpegs = glob.glob('*.jpg') 9jpegs.sort() 10 11for start in range(0, len(jpegs), 4): 12 # 4ずつ抽出 13 divjpegs = jpegs[start : start + 4] 14 15 # 4つの画像を開く 16 im1 = Image.open(divjpegs[0]) 17 im2 = Image.open(divjpegs[1]) 18 im3 = Image.open(divjpegs[2]) 19 im4 = Image.open(divjpegs[3]) 20 21 # 4つの画像を結合 22 def get_concat(im1, im2, im3, im4): 23 dst = Image.new('RGB', (im1.width + im2.width, im1.height + im3.height)) 24 dst.paste(im1, (0, 0)) 25 dst.paste(im2, (im1.width, 0)) 26 dst.paste(im3, (0, im1.height)) 27 dst.paste(im4, (im1.width, im1.height)) 28 return dst 29 30 concatnames = {os.path.basename(j)[:4] for j in divjpegs} 31 concatnames_str = str(concatnames) 32 concatnames_str2 = concatnames_str.replace('{', '') 33 concatnames_str3 = concatnames_str2.replace('}', '') 34 concatnames_str4 = concatnames_str3.replace("'", '') 35 36 37 # 結合した画像を保存 38 get_concat(im1, im2, im3, im4).save(concatnames_str4 + ".jpg") 39コード

投稿2021/08/11 13:58

Showthekey37

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問