2017-07-29 23 views
-4

背景画像が自動的にダウンロードされたWindowsの「資産」フォルダから画像をコピーする必要があります。これらの画像の一部は表示されず、ある時点で削除されます。私が削除される前にすべての新しいイメージを見たことを確認するために、これらのイメージを別のフォルダにコピーするPythonスクリプトを作成しました。効率的には、2つの画像を比較する方法が必要です。新しい画像のみがコピーされます。私がする必要があるのは、2つの画像を視覚的に同一ではないことを確認するために、2つの画像を単純な手法で比較する機能を持たせることだけです。簡単なテストでは、画像ファイルをコピーしてコピーと元の画像を比較することができます。その場合、関数はそれらが同じ画像であることを伝えることができます。 Pythonで2つの画像を比較するにはどうすればよいですか?私はそれを行うためのシンプルで効率的な方法が必要です。私が読んだ答えは、少し複雑です。Pythonで2つの画像を比較する簡単な方法

+1

「比較する」とはどういう意味ですか?正確にピクセル値または異なる品質の類似した画像? – minhhn2910

+0

そして、compare関数は "same"または "different"を返すだけですか? – minhhn2910

+0

あなたが見た複雑な答えは、実際の画像を比較していると思います。あなたは本当にそれをする必要はありません。 2つのファイルに全く同じバイトが含まれているかどうかをテストするだけです。簡単な方法は、これらのファイルのハッシュを比較することです。標準の 'hashlib'モジュールから(例えば)MD5やSHA-256を使うことができます。 –

答えて

1

私は以前にも同様の問題が発生しました。私はPIL.Image.tobytes()を使ってイメージをバイトオブジェクトに変換し、バイトオブジェクトに対してhash()を呼び出し、ハッシュ値を比較しました。

+0

あなたの経験から、これがうまくいかなかった状況に遭遇しましたか? – Amani

+0

いいえ、私はちょうどいくつかのスクリーンショットをキャプチャして、私は重複コピーを作成しないことを確認使用しています。数十億の画像を処理していない限り、私は衝突について心配しません。 – user2341726

+0

@Amaniハッシュの衝突の可能性を減らすために、組み込みの 'hash'ではなく' hashlib'の暗号ハッシュ関数を使用することを強くお勧めします。イメージファイルを別のイメージファイル形式に変換しない限り、 'PIL.Image.tobytes'を使う必要はありません。ファイル内のバイトのハッシュを使用するだけです。 –

0

は、Python

オプション1で2つのイメージを比較する: 使用ImageChopsモジュールとそれがチャンネル操作(「チョップ」)と呼ばれる算術画像操作の数を含んでいます。これらは、特殊効果、イメージ合成、アルゴリズムペインティングなど、さまざまな目的で使用できます。

例:

ImageChops.difference(画像1、画像2)は、二つの画像間の差の絶対値を返し

画像

を⇒します。
アウト= ABS(画像1 - 画像2)

オプション2:

Scikit-imageはscipyのダウンロードのための画像処理ツールボックスです。

scikit-imageではcompare_ssimを使用してください。2つの画像の平均構造類似度を計算してください

参考文献:

Python Compare Two Images

関連する問題