Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Comparar dos imagenes
#1
Photo 
Ante todo un condial saludos.

Vengo por aca con un pequeño problema en python en un proyecto personal a ver si alguien me puede ayudar, pero como soy nuevo en python tiendo a complicarme mucho, lo que estoy tratando  de hacer es comparar dos imagenes y ver si son iguales y no logro conseguirlo, uso openCV para comprar las imagenes:

Bueno la segunda imagen practicamente es la misma que la primea en cuanto tamaño y fondo, pero no tiene las letras por tal son diferentes. Pero mi codigo la detecta como iguales.

Imagen 1:
[Imagen: Error-No-Captcha-Base.png]
Imagen 2:
[Imagen: Error-No-Captcha-Actual.png]


Código:
import cv2
import os
import numpy as np

original = cv2.imread(os.getcwd() + '\\source\\capturas\\_ErrorSomethingWentWrongBase.png',1)       
comparar = cv2.imread(os.getcwd() + '\\source\\capturas\\_ErrorSomethingWentWrongActual.png',1)

if original.shape == comparar.shape:
    difference = cv2.subtract(original, comparar)
    b, g, r = cv2.split(difference)
    if (cv2.countNonZero(b) == 0 and cv2.countNonZero(g) == 0 and cv2.countNonZero(r) == 0):
        print("IGUALES")

Creo que hay que hacer una comparacion mas profunda pixel por pixel algo asi.

Cabe mencionar que cuando la segunda imagen tiene otro color de fondo si la detecta como diferentes.

Gracias de antemano por cualquier ayuda.
Responder
#2
Saludos, dado que no puede resolver a nivel de programación lo que hice fue tomar una proción mas grande imagen donde existieran mas diferencias sobre todo en el fondo de la imagen y ahi si me detecto las imagenes como diferentes.

Es algo raro eb otros lenguajes mas sencillos como AutoIt es simple comprar dos imagenes.

Gracias.
Responder
#3
Esto me sigue dando probelmas. Si alguien tiene una idea le agradeceria.
Responder
#4
Una lastima que imagenes no esta aqui para probar. El codigo de abajo lo probe con dos imagenes de cheques. Los cheques son iguales pero uno tiene textos al frente asi que me da no iguales. Tambien print el porciento de desigualdad de las imagenes.

Nota el treshold de 30. Puedes cambiarlo segun tu quieras. En este ejemplo si la diferencia es menos de 30, te dira que las imagenes son iguales.


Suerte

Código:
import cv2


def compare_images(image1_path, image2_path):
    # Load the images
    image1 = cv2.imread(image1_path)
    image2 = cv2.imread(image2_path)

    # Check if the images have the same dimensions
    if image1.shape != image2.shape:
        return False

    # Compute the absolute difference between the images
    diff = cv2.absdiff(image1, image2)
    diff_gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)

    # Set a threshold value (you can adjust this based on your needs)
    threshold = 30

    # Count the number of pixels where the difference is greater than the threshold
    num_diff_pixels = cv2.countNonZero(diff_gray)

    # Calculate the percentage of difference
    total_pixels = diff_gray.shape[0] * diff_gray.shape[1]
    percentage_diff = (num_diff_pixels / total_pixels) * 100

    print(f"Percentage of difference: {percentage_diff}")

    # Determine if the images are equal based on the percentage of difference
    if percentage_diff <= threshold:
        return True
    else:
        return False


# Example usage
# image1_path = './images/check_sample.jpg'
image1_path = './images/check_sample_text.jpg'
image2_path = './images/check_sample.jpg'
are_equal = compare_images(image1_path, image2_path)

if are_equal:
    print("The images are equal.")
else:
    print("The images are not equal.")
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)