Python

【Pythonで作業自動化】画像処理編 〜複数の画像やグラフを整列して並べる〜

皆さんは画像やグラフを連続で並べたい時どうしていますか。
数が少なければ一つ一つ並ベれば良いですが、間隔を揃えたりしていると意外に時間がかかるものです。
本記事ではプログラミング初心者向けにPythonを使って複数の画像を読み込み、並べて表示するサンプル例を紹介します。

エクセルやそれ以外のソフトでも並べる事ができますが、
Pythonはコードの中身がシンプルで初心者でも1日あれば
見よう見まねで形になるのかなと感じています。

2つの例を紹介します。

①画像のファイル名を一つ一つ入力する必要があるもの

不規則で色々なファイル名のものを並べたい時に使えます

②画像のファイル名も自動的に認識してくれるもの

  ⇒連番など規則があるファイル名のものを並べたい時に使えます

★下記で紹介する.pyのファイルと同じフォルダ内に10枚の画像を用意して整列した例を紹介します

画像の大きさが異なるものでも整列することができます。

画像の大きさを自動で揃えたい場合はトリミングすることができます。

トリミングについてはこちらの記事を参考にして下さい。

【Pythonで作業自動化】画像処理編 〜複数画像を連続でトリミングしていく〜 数が少なければ一つ一つ処理していけば良いですが、トリミング量を揃えたりしていると意外に時間がかかるものです。 そこで、本記事ではプ...

【画像のファイル名を指定して並べる】

infile[1]=”1.jpg” の ” ” 中身を画像のファイル名にしていくだけです。

imgname=”result_10″ の ” ” 中身は出力する時のファイル名を入力して下さい。

plt.subplot(2,5,i) で行列を指定します。(例:2×5)

 

初心者向けの簡単なコード

from PIL import Image
import cv2
import numpy as np
import matplotlib.pyplot as plt

infile=[1,2,3,4,5,6,7,8,9,10,11]
image=[1,2,3,4,5,6,7,8,9,10,11]

infile[1]="1.jpg"
infile[2]="2.jpg"
infile[3]="3.jpg"
infile[4]="4.jpg"
infile[5]="5.jpg"
infile[6]="6.jpg"
infile[7]="7.jpg"
infile[8]="8.jpg"
infile[9]="9.jpg"
infile[10]="10.jpg"

imgname="result-10"
plt.figure(figsize=(20, 15))
plt.subplots_adjust(wspace=0.0, hspace=0.0)

for i in range(1, 11):  
    image[i] = cv2.imread(infile[i])
    image[i] = cv2.cvtColor(image[i], cv2.COLOR_BGR2RGB)
    plt.subplot(2,5,i)
    plt.subplots_adjust(hspace=0.0)
    plt.tick_params(labelbottom="off")
    plt.tick_params(labelleft="off")
    plt.tick_params(bottom="off")
    plt.tick_params(left="off")
    plt.gca().spines['right'].set_visible(False)
    plt.gca().spines['top'].set_visible(False)
    plt.gca().spines['left'].set_visible(False)
    plt.gca().spines['bottom'].set_visible(False)
    plt.rcParams["font.size"] = 20
    plt.title( str(i))
    plt.imshow(image[i]) 
plt.savefig(imgname + '.jpg')

内包表現やfot文を使ったスマートなやり方

from PIL import Image
import cv2
import numpy as np
import matplotlib.pyplot as plt

#下2文は中身は一緒になる
infile=[num for num in range(1,12,1)]
image=list(range(1,12))

filename="test"

for i in range(1, 11):  
  infile[i] = filename +  str(i) +".jpg"

imgname="result-auto-10"
plt.figure(figsize=(20, 15))
plt.subplots_adjust(wspace=0.0, hspace=0.0)

for i in range(1, 11):  
    image[i] = cv2.imread(infile[i])
    image[i] = cv2.cvtColor(image[i], cv2.COLOR_BGR2RGB)
    plt.subplot(2,5,i)
    plt.subplots_adjust(hspace=0.0)
    plt.tick_params(labelbottom="off")
    plt.tick_params(labelleft="off")
    plt.tick_params(bottom="off")
    plt.tick_params(left="off")
    plt.gca().spines['right'].set_visible(False)
    plt.gca().spines['top'].set_visible(False)
    plt.gca().spines['left'].set_visible(False)
    plt.gca().spines['bottom'].set_visible(False)
    plt.rcParams["font.size"] = 20
    plt.title( str(i))
    plt.imshow(image[i]) 
plt.savefig(imgname + '.jpg')

pythonを学ぶのにおすすめな書籍も紹介しています。

【資格取得におすすめ】機械学習・AI・ディープラーニングについて理解できる本ランキング 今回は機械学習・AI・ディープラーニングについて理解できる本を紹介します。 日本ディープラーニング協会が主催するG検定の資格取得での勉...
Mickey@コーヒー好きエンジニア

【製造業×プログラミング×AI】Python/VBAを活用した業務改善、Streamlit/Plotlyを活用したWebアプリ開発について初心者向けに発信中|趣味は自家焙煎コーヒー作り|noteでは焙煎理論を発信|ココナラではプログラミングに関する相談,就職/転職やコーヒーに関する相談などのサービスをやっています