6

私は2つの画像を比較する必要があるプロジェクトで作業しています。誰でも手助けをしてください。画像はスクリーンショットです。ソフトウェア。 画像に表示されている数字と文字(ソフトウェアのスクリーンショット)を含む2つの画像が同一であるかどうかを確認したいと考えていました(ソフトウェアのスクリーンショット)。Pythonで画像を比較するPythonコード

+0

あなたが比較するとどういう意味ですか?それらが同一であるかどうか確認したいですか? Pythonでこれを行う方法や一般的に画像を比較する方法の詳細をお探しですか? –

+0

はい私はそれらがソフトウェアに表示された数字/文字を含めて同一であるかどうかを比較したいと思った。 – stallion

答えて

6

適切な比較を行うには、以下の方法があります。

  • まず2枚の画像がどの程度似ているかの尺度を取得するには二乗平均平方根差の#

である、あなたは、二乗平均平方根(RMS)値を計算することができます画像の違い。イメージが完全に同一である場合、この値はゼロです。次の関数はdifference関数を使用し、結果の画像のヒストグラムからRMS値を計算します。

# Example: File: imagediff.py 

import ImageChops 
import math, operator 

def rmsdiff(im1, im2): 
    "Calculate the root-mean-square difference between two images" 

    h = ImageChops.difference(im1, im2).histogram() 

    # calculate rms 
    return math.sqrt(reduce(operator.add, 
     map(lambda h, i: h*(i**2), h, range(256)) 
    )/(float(im1.size[0]) * im1.size[1])) 
  • 別の2枚の画像がまったく同じ内容を持っているかどうかを判断する最も簡単な方法は、2つのイメージの違いを取得した後、境界を計算することである正確な比較#

ですこの画像内の非ゼロ領域のボックス。画像が同一である場合、差分画像のすべてのピクセルはゼロであり、境界ボックス関数はなしを返します。

import ImageChops 

def equal(im1, im2): 
    return ImageChops.difference(im1, im2).getbbox() is None 
1

私はすぐに答えを出すことはできませんが、思う)正しい方向。 2つのイメージを比較する簡単な方法は、バイナリ表現のハッシュを作成し、それらのハッシュが同じかどうかを確認することです。この問題の1つは、使用したいハッシュ関数であり、衝突の可能性が低いものを探す必要があります。もう1つは、画像ファイルに元のバイナリ情報にメタデータが添付されている可能性があるためです。バイナリ情報のみを使って画像を比較するために、メタデータをどのように切り捨てるのか。 また、私は確かに分かりませんが、おそらくjpgでエンコードされた画像のバイナリ表現はpngでエンコードされた画像とは異なりますので、それに注意してください。

6

私は2つの画像を比較するStructured Similarity (SSIM)メソッドを使用していますpyssimと呼ばれるPythonライブラリを維持しています。

これはPythonバインディングを持っていませんが、perceptualdiffプログラムは2つの画像を比較するのにも素晴らしいものです。

+0

はあいまいな比較のpyssimですか?画像にテキストボックスがある場合、ボックスの位置は別の画像と同じですが、テキストはわずかに異なりますか?それは何のスコアを返しますか?それは構造だけを考慮していますか? – user299709

+0

テキストが異なる場合は、スコアが低くなります。 – jterrace