6

Tôi đang làm việc trên một dự án mà tại một thời điểm tôi cần phải so sánh hai images.can bất cứ ai xin vui lòng giúp tôi với một phương pháp để làm như vậy..By cách hình ảnh là ảnh chụp màn hình của một phần mềm. tôi muốn kiểm tra xem hai hình ảnh có giống nhau không bao gồm số và chữ được hiển thị trong hình ảnh (ảnh chụp màn hình phần mềm) ..mã python để so sánh hình ảnh trong python

+0

Bạn có ý nghĩa gì khi so sánh? Bạn có muốn xem chúng giống hệt nhau không? Bạn đang tìm kiếm chi tiết về cách thực hiện điều này bằng Python hay cách so sánh hình ảnh nói chung? –

+0

vâng tôi muốn so sánh để xem chúng có giống hệt nhau không bao gồm các số/chữ được hiển thị trong phần mềm – stallion

Trả lời

6

Có các cách sau để thực hiện so sánh phù hợp.

  • Đầu tiên là Root-Mean-Quảng trường Difference #

Để có được một biện pháp như thế nào tương tự như hai hình ảnh đang có, bạn có thể tính toán root-mean-square (RMS) giá trị của sự khác biệt giữa các hình ảnh. Nếu hình ảnh giống hệt nhau, giá trị này bằng 0. Hàm sau sử dụng hàm khác biệt, và sau đó tính giá trị RMS từ biểu đồ của ảnh kết quả.

# 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])) 
  • khác là So sánh chính xáC#

Cách nhanh nhất để xác định xem hai hình ảnh có chính xác cùng một nội dung là để có được sự khác biệt giữa hai hình ảnh, và sau đó tính toán bounding hộp của các vùng khác 0 trong hình ảnh này. Nếu các hình ảnh giống hệt nhau, tất cả các pixel trong hình ảnh khác nhau là 0 và hàm hộp giới hạn trả về Không.

import ImageChops 

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

Tôi không thể trả lời, nhưng tôi sẽ chỉ cho bạn (I suy nghĩ) đúng hướng. Cách đơn giản để so sánh hai hình ảnh là tạo ra một băm của các biểu diễn nhị phân của chúng và sau đó xem các hash đó có giống nhau hay không. Một vấn đề với điều này là với hàm băm bạn muốn sử dụng và bạn phải tìm một hàm có khả năng va chạm thấp và tệp kia có thể chứa siêu dữ liệu được đính kèm với thông tin nhị phân ban đầu, vì vậy bạn sẽ phải xem xét tại cách cắt bỏ siêu dữ liệu đó để so sánh các hình ảnh chỉ bằng cách sử dụng thông tin nhị phân của chúng. Ngoài ra, tôi không biết chắc chắn nhưng có lẽ biểu diễn nhị phân của hình ảnh được mã hóa trong jpg khác với hình ảnh được mã hóa trong png, vì vậy bạn nên biết điều đó.

6

Tôi đang duy trì thư viện Python có tên pyssim sử dụng phương pháp Structured Similarity (SSIM) để so sánh hai hình ảnh.

Nó không có ràng buộc python, nhưng chương trình perceptualdiff cũng rất tuyệt khi so sánh hai hình ảnh - và khá nhanh.

+0

là pyssim là một loại so sánh mờ? nếu có một hộp văn bản trong một hình ảnh, vị trí của các hộp giống nhau với một hình ảnh khác, nhưng văn bản hơi khác một chút? Số điểm nào nó sẽ trở lại? nó chỉ xem xét cấu trúc? – user299709

+0

Nếu văn bản khác, văn bản sẽ có điểm thấp hơn. – jterrace