Loading [MathJax]/extensions/tex2jax.js

Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Python

Pythonで複数の画像を結合する方法をご紹介

投稿日:2021年2月7日 更新日:

<目次>

(1) Pythonで複数の画像を結合する方法
 (1-1) STEP1:Pillowのインストール
 (1-2) STEP2:画像の読み込み
 (1-3) STEP3:画像を結合
 (1-4) STEP4:結合後の画像を表示
 (1-5) サンプルプログラム(STEP1~4を纏めたもの)

(1) Pythonで複数の画像を結合する方法

PillowはPIL(Python Image Library)というPythonで画像を扱うためのライブラリに対して、ユーザーフレンドリーな機能を追加したパッケージです。Pillowを使う事で画像を結合するといった加工ができるので、今回はその手順をご紹介します。

(1-1) STEP1:Pillowのインストール

①PyPIのサイトにアクセス

PyPI(Python Package Index)のサイトからPillowのパッケージをダウンロードします。

 
(図111)PyPIのサイト

②資源のダウンロード
ここでご自身のマシンのOSバージョンとPythonバージョンから、適切な資源を選択します。迷ったら下記ページをご参照ください。
 
(図112)ダウンロード
 
③資源をサーバに配置
ダウンロードした資源をサーバの任意の場所に配置します。
(図113)

 

④インストールの実行
以下のコマンドでインストールを実施します(資源名は各自ダウンロードしたファイルの名前を代入してください)。
  1. pip install [ダウンロードしたPillowの資源名].whl
  2. rem (例)
  3. pip install Pillow-8.0.1-cp37-cp37m-win_amd64.whl

 

(図114)pipコマンド実行

 

次の手順からが実際にPillowを使って、画像を結合するためのプログラムを組んでいきます。今回は以下の2つの画像を結合していきます。
 
(図115)TestImage1
(図116)TestImage2

目次にもどる

(1-2) STEP2:画像の読み込み

画像を読み込むには、まずPillowパッケージから「Image」モジュールをインポートした上で、その中の「open」ファンクションを実行します。

(STEP2)

  1. # Imageモジュールのインポート
  2. from PIL import Image
  3.  
  4. def main():
  5. # 2つの画像を開く
  6. im_bef1 = Image.open(r"N:\softwaretools\TestData\TestImage1.PNG")
  7. im_bef2 = Image.open(r"N:\softwaretools\TestData\TestImage2.PNG")

openファンクションの引数には画像のパスを与えています。文字列の前に付いている「r」はraw文字列(エスケープ処理せずに、書かれたままの文字列として扱う)のために付与しています。これにより「\」なども文字列として扱われます。

(図121)

目次にもどる

(1-3) STEP3:画像を結合

次に2つの画像の結合処理を行いますが、まずは結合後の画像を生成するための「枠」を作成します。この枠に2つの画像を貼る(pasteメソッド)する事で、画像の結合を行います。

(構文)

  1. # 結合後の画像の「枠」を作成
  2. im_aft = Image.new('RGB',([イメージの幅],[イメージの高さ]))
  3. # 「枠」に1つ目の画像を貼り付け
  4. im_aft.paste([画像1],([始点x座標],[始点y座標]))
  5. # 「枠」に2つ目の画像を貼り付け
  6. im_aft.paste([画像2],([始点x座標],[始点y座標]))

(例)

  1. # 結合後の画像の「枠」を作成
  2. # ⇒枠の横幅=1つ目の画像幅+2つ目の画像幅
  3. # ⇒枠の高さ=1つ目の画像高さ と 2つ目の画像幅 の大きい方の値
  4. im_aft = Image.new('RGB',((im_bef1.width + im_bef2.width),max(im_bef1.height,im_bef2.height)))
  5. # 「枠」に1つ目の画像を貼り付け
  6. # ⇒1つ目の画像は始点を原点(0,0)に設定
  7. im_aft.paste(im_bef1,(0,0))
  8. # 「枠」に2つ目の画像を貼り付け
  9. # ⇒2つ目の画像は始点を1つ目の画像の右上(im_bef1.width,0)に設定
  10. im_aft.paste(im_bef2,(im_bef1.width,0))
(図131)

目次にもどる

(1-4) STEP4:結合後の画像を表示

最後に結合後の画像をImageモジュールのshowメソッドで表示します。

(STEP4)

  1. im_aft.show()

目次にもどる

(1-5) サンプルプログラム(STEP1~4を纏めたもの)

  1. #Imageモジュールのインポート
  2. from PIL import Image
  3.  
  4. def main():
  5. # 2つの画像を開く
  6. im_bef1 = Image.open(r"N:\softwaretools\TestData\TestImage1.PNG")
  7. im_bef2 = Image.open(r"N:\softwaretools\TestData\TestImage2.PNG")
  8. # 結合後の画像の「枠」を作成
  9. im_aft = Image.new('RGB',((im_bef1.width + im_bef2.width),max(im_bef1.height,im_bef2.height)))
  10. # 「枠」に1つ目の画像を貼り付け
  11. im_aft.paste(im_bef1,(0,0))
  12. # 「枠」に2つ目の画像を貼り付け
  13. im_aft.paste(im_bef2,(im_bef1.width,0))
  14. # 結合後の画像を表示
  15. im_aft.show()
  16.  
  17. if __name__ == '__main__':
  18. main()

(図151)実行結果

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Python

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

PythonでAPIを呼び出すサンプルプログラムをご紹介

  <目次> (1) PythonでAPIを呼び出すサンプルプログラム  (1-1) 構文  (1-2) STEP1:事前準備  (1-3) STEP2:疎通①(最もシンプルなAPI呼び出し …

no image

PythonでValueError: If using all scalar values, you must pass an indexエラーが出た時の対処方法

  <目次> (1) PythonでValueError: If using all scalar values, you must pass an indexエラーが出た時の対処方法  ( …

Python3.5&Anaconda4.2のインストール手順(CentOS6)とHelloWorldの方法

(0)目次&概説 (1) インストール資源の入手  (1-1) ディストリビューション  (1-2) GitHubのpyenvのリポジトリのコピーを取得する (2) インストールの実施  (2-1) …

PythonでAPI呼び出す時のヘッダー、ボディの指定方法について

  <目次> (1) PythonでAPI呼び出す時のヘッダー、ボディの指定方法について  (1-1) 記事の概要  (1-2) ①「ヘッダー」の指定方法  (1-3) ②「ボディ」の指定方 …

PythonのFlaskフレームワークを用いたRest APIのサンプル

  <目次> (1) PythonのFlaskフレームワークを用いたRest APIのサンプル  (1-1) Flaskとは  (1-2) STEP1:Flaskフレームワークの導入  (1 …

  • English (United States)
  • 日本語
S