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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

Q&A

解決済

1回答

5561閲覧

2つのフォルダ内の複数の対応する画像を一括で合成したい

kasutera

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

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

0グッド

0クリップ

投稿2020/08/07 10:29

編集2020/08/08 04:31

プログラミングを最近始め、分からない所があったため質問させていただきます。
画像処理にプログラミングを用いており、今までは画像の合成を1枚ずつ行っていました。
しかし、数万枚の画像を合成する必要性が出てきました。

まず、単体で合成を行う場合は次のコードを用いていました。
jupyterでpythonを用いて行いました。

jupyter

1import cv2 2import matplotlib.pyplot as plt 3import numpy as np 4a = cv2.imread('1.png') 5b = cv2.imread('2.png') 6c = cv2.addWeighted(src1=a,alpha=1,src2=b,beta=1,gamma=0) 7cv2.imwrite('3.png', c)

次に、私が今後行いたい複数の対応する画像の合成について説明します。
ディレクトリの構成は次のようになっています。
画像ファイルは実際に下記のような番号の名前を用いています。

a

1synthesis 2 └ A 3 ├ 00000.png 4 ├ 00001.png 5 ├ 00002.png 6 └ ... 7 └ B 8 ├ 00000.png 9 ├ 00001.png 10 ├ 00002.png 11 └ ... 12 └ C 13

AフォルダとBフォルダの対応する名前の画像を合成し、または上から順番に合成し、Cフォルダに00000.png、00001.png、00002.png、...という名前で出力したいです。
例えば、Aフォルダに10枚、Bフォルダに10枚画像があり、対応する画像をそれぞれ合成して、Cフォルダに10枚の合成画像の出力を行います。
このように、2つのフォルダ内の複数の対応する画像を一括で合成するにはどのようにすれば良いでしょうか。

初めてプログラミングに関する質問を行ったので、たどたどしい説明で申し訳ありません。
よろしくお願い致します。


回答者様のおかげで解決できました。
最終的に上手く動作したコードを以下に記載します。

python

1import cv2 2import pathlib 3 4filename_list = [f.name for f in pathlib.Path('A').glob('*.png')] 5for filename in filename_list: 6 a = cv2.imread(f'A/{filename}') 7 b = cv2.imread(f'B/{filename}') 8 c = cv2.addWeighted(src1=a,alpha=1,src2=b,beta=1,gamma=0) 9 cv2.imwrite(f'C/{filename}', c)

ありがとうございました。

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

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

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

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

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

meg_

2020/08/07 11:33

> 一括で合成するにはどのようにすれば良いでしょうか。 「今までは画像の合成を1枚ずつ行っていました。」をループ処理するのが一般的かと思います。
guest

回答1

0

ベストアンサー

まず、こうすれば、A と B のディレクトリにある 00000.png ファイルを合成して C に保存できます。

python

1import cv2 2 3a = cv2.imread('A/00000.png') 4b = cv2.imread('B/00000.png') 5c = cv2.addWeighted(src1=a,alpha=1,src2=b,beta=1,gamma=0) 6cv2.imwrite('C/00000.png', c) 7

これを、ループで回せばいいわけです。
回すループは、ファイル名のリストがよさそうですから、

python

1for filename in filename-list: 2 a = cv2.imread(f'A/{filename}') 3 b = cv2.imread(f'B/{filename}') 4 ---以下略---

のような形になります。

ディレクトリAにあるファイルが基準になるのであれば、ディレクトリAにあるファイル名のリストをこのfilename-listにすればいいでしょう。
pathlibのglobを使う場合こんな感じになります。

python

1import pathlib 2 3filename-list = [f.name for f in pathlib.Path('A').glob('*.png')]

組み合わせればできるんではないでしょうかね。

投稿2020/08/07 15:02

編集2020/08/07 15:06
TakaiY

総合スコア13687

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

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

kasutera

2020/08/08 04:39

回答者様のコードを組み合わせることでできました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問