0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PythonのPillowで簡易的に同一画像の判別をする

Posted at

こんな人に役に立つ

  • 2枚の画像が同じ画像か判別したい。
  • 可能な限り簡易的にやりたい。
  • 厳密性は求めない。

こんな人に役に立たない

  • リサイズされていても同一視したい。
  • 類似度を考慮したい。

なぜPillowで判別するのか

判別した流れでPillowでリサイズとかできて便利です。
「Python 画像 同じ」とかで調べたら、リサイズとかを考慮したやつしか出てこなかったので、もっと簡易的なやつを紹介します。

コード

とても簡単です。
一応たくさんコメントを書いておきました〜

# imgディレクトリに画像が入っている前提

from PIL import Image
import os

# このファイルがあるディレクトリの絶対パス
base_dir = os.path.abspath(os.path.dirname(__file__))

# 画像のハッシュを求める(正確にはハッシュではないけど)
def img_hash(filename):
    # ファイル名から絶対パスを求める
    pil_img = Image.open(base_dir + '/img/' + filename)
    # 画像を10x10にリサイズする
    pil_img = pil_img.resize((10, 10), Image.ANTIALIAS)
    # グレースケールに変換
    pil_img = pil_img.convert('L')
    # 100マスの色の数値を取得(この時点ではPILのオブジェクト)
    data = pil_img.getdata()
    # 数値を文字列にして、リストにする
    data_list = map(str, list(data))
    # くっつけて返す
    return ''.join(data_list)

print('01.jpg: ', img_hash('01.jpg')) # 728091867896130143159161748895106...
print('02.jpg: ', img_hash('02.jpg')) # 728091867896130143159161748895106...
print('03.jpg: ', img_hash('03.jpg')) # 255255255255246224215245255255255...
print(img_hash('01.jpg') == img_hash('02.jpg')) # True
print(img_hash('01.jpg') == img_hash('03.jpg')) # False

こんな感じです。
アンチエイリアスはやる意味はよくわからないけど、参考元がやってたのでやりました〜

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?