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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

1466閲覧

pythonで分割した画像を結合したい

saitosan

総合スコア5

Python 3.x

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

1グッド

0クリップ

投稿2022/02/24 08:14

画像を指定したサイズに分割して保存し、分割した画像を結合するプログラムを作成しています。
画像を指定したサイズに分割し保存ところまではできていますが結合するところができません。
調べたのですが分割する枚数が決まっているものしか見つからず上手くいきません。

from pathlib import Path from PIL import Image import cv2 import numpy as np def get_paths(input_dir, exts=None): paths = sorted([x for x in input_dir.iterdir()]) if exts: paths = list(filter(lambda x: x.suffix in exts, paths)) return paths # ディレクトリ内の指定した拡張子のファイルをすべて取得する。 input_dir = Path(r"/home/practice/img/") # 出力先のディレクトリを作成する。 output_dir = Path(r"output") output_dir.mkdir(exist_ok=True) for path in get_paths(input_dir, exts=[".jpg", ".jpeg", ".png"]): # 画像を読み込む。 img = cv2.imread(str(path)) size = (100, 100) # 分割後の大きさ rows = int(np.ceil(img.shape[0] / size[0])) # 行数 cols = int(np.ceil(img.shape[1] / size[1])) # 列数 patchs = [] for row_img in np.array_split(img, rows, axis=0): for patch in np.array_split(row_img, cols, axis=1): patchs.append(patch) #print(type(patch)) print(len(patchs)) # 保存する。 for i, patch in enumerate(patchs): #save_path = output_dir / f"patch_{i:02d}.png" #save_path = output_dir / f"{file_name}patch_{i:02d}.png" #cv2.imwrite(str(save_path), patch) # 結果を保存する。 save_path = output_dir.name + "/" + str(i) + "_" + path.name cv2.imwrite(str(save_path), patch)
xeno👍を押しています

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

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

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

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

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

TakaiY

2022/02/24 09:43

「調べたのですが分割する枚数が決まっているものしか見つからず」とのことですが、縦がいくつ、横がいくつ、などの情報がわかっていなければ結合できないのでは? ファイルが12こあったとして、それを、どのように結合したいのですか?、
saitosan

2022/02/24 09:54

ファイルは画像ファイルということで話を進めます。 画像ファイルがIMG_1.jpgからIMG_12.jpgの12個あったら、IMG_1.jpgからIMG_12.jpgを縦横サイズ100で分割し保存する。 そのあと、分割した画像を元の画像と同じように結合したいです。 各画像の元々のサイズはバラバラですが100で割り切れるもののみしかないです。
ppaul

2022/02/24 09:58

なぜ分割したいのかがわかりません。 分割して結合して元の画像を復元したいなら、そもそも分割しなければ良いでしょう。
TakaiY

2022/02/24 11:14 編集

質問の意図が伝わってませんでしたね。 「分割した画像を元の画像と同じように結合したい」ですよね たとえば、分割された画像が12枚だったとしたら6通りの復元方法がありますよね。 ということは、元に戻すには少なくとも縦横の分割数がわからなければなりませんし、そうであれば、すてにやりかたは知っているということになりませんか?、
saitosan

2022/02/24 13:13

TakaiYさん おっしゃっていた意味は理解できました。 こちらも聞きたいことを具体的に書けていませんでした。 毎回異なる画像を分割した際に縦横の分割数の記録と分割数に合わせた結合のやり方を聞きたかったです。
fana

2022/02/25 02:41

そもそも 分割→結合 を行うことの目的自体が全く不明(なぜかそのことには答えたくない様子?)であるので,どういう話をしているのかが不明と見えます. 具体的に話の 前提/条件 を述べるべきではないのでしょうか. 「結合」に際してどれだけの情報を 利用できる/利用してよい という話なのか? 言い換えれば,「分割」結果としてどれだけの情報を残してよいのか? 分割時に情報を欲しいだけ残してそれを結合時に用いて良いということであれば「いくらでも好きな方法で必要な情報をどこかに保存すれば良いだけ」という話にしかなりません. しかし,例えばプログラムにジグソーパズルを自動で解かせるかのような,何らかのアルゴリズムで結合方法を推定するような話なのであれば話は全然違ってくるでしょう.
fana

2022/02/25 02:49

N枚の画像について各画像を 100x100 サイズの部分画像群に分割した結果の画像群が,あるフォルダ内に保存されている. ・Nの値は不明 ・元のN枚の画像それぞれの元のサイズは不明(ただし縦横共に100の倍数ということだけは既知) ・フォルダ内の各100x100サイズ画像が元々どの画像のどこの位置だったのかは全く情報が与えられない ・(とりあえずフォルダ内には他の余計な物はないものとする) という条件下でN枚の画像を復元せよ. …みたいな話かもしれないし. (シュレッダーのゴミから文書を復元するかのような)
saitosan

2022/02/25 02:51

fanaさん 画像を分割し、結合を行う間には機械学習の学習済みモデルを通します。 学習済みモデルは画像のサイズ100×100で学習しているのでそのサイズに分割したいです。 なので、流れとしては 画像を分割→分割した画像群をモデルに入力→モデルからの出力を結合 という流れです。 PCのスペックの関係で学習時の画像サイズは変えられません。 今回ご教授頂きたいのは分割した画像を結合する部分なので、分割した画像群をモデルに入力の部分は必要ないと判断したため省きました。 結合時には縦横の分割数は分かっています。
saitosan

2022/02/25 02:54

fanaさん 使用する機械学習のモデルはノイズ除去を行うものなので、出力される画像は入力画像と同じサイズです。
fana

2022/02/25 03:29

とりあえず意味はわかりました. 小画像群がその絵毎に更新される→くっつける という話ですね.
saitosan

2022/02/25 03:31

そうです 聞きたいこと以外の情報は省いてしましました 申し訳ありません
guest

回答1

0

ベストアンサー

毎回異なる画像を分割した際に縦横の分割数の記録

どのようなアプリケーションにするかによっていろいろあるでしょう。

  • 分割した画像の組は1つのフォルダにでも入れるのでしょうから、そこに、情報を書いたファイルを入れておく。
  • ファイル名とその他の情報をDBに記録しておく。
  • ファイル名に含めてしまう。

とかいろいろあります。 それこそ設計のしどころです。
最後のであれば、もと画像が「image01.jpg]で、それが横10・縦6に分割されて、その横1番目・縦3番目の画像でであれば、「image01_10_6_1_3.jpg」とするとか、

分割数に合わせた結合のやり方

これについては、検索すればいろいろ出てくるのでそちらを見ていただくのがいいでしょうね。
たとえばこことか

投稿2022/02/24 14:19

TakaiY

総合スコア12765

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

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

fana

2022/02/25 02:53

> 分割した画像の組は1つのフォルダにでも入れるのでしょうから、そこに、情報を書いたファイルを入れておく。 バラした画像群と一緒に「結合するためのソースコード」を出力しちゃえば良い気がしますね.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問