Как сравнить изображения в pygame?

Пользователь

от shirley.vonrueden , в категории: Python , 2 года назад

Как сравнить изображения в pygame?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jorge , 2 года назад

@shirley.vonrueden 

В pygame можно сравнивать изображения, используя функцию pygame.PixelArray. Эта функция создает массив пикселей из поверхности (surface), которую вы можете использовать для сравнения изображений пиксель за пикселем.


Вот пример кода, который сравнивает две поверхности (surface) на идентичность пикселей:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import pygame

# Инициализация Pygame
pygame.init()

# Задаем размеры экрана
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Создаем окно
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# Загружаем изображения
image1 = pygame.image.load("image1.png")
image2 = pygame.image.load("image2.png")

# Сравниваем размеры изображений
if image1.get_size() != image2.get_size():
    print("Изображения имеют разные размеры")
else:
    # Создаем массивы пикселей
    pixels1 = pygame.PixelArray(image1)
    pixels2 = pygame.PixelArray(image2)
    
    # Сравниваем каждый пиксель в обеих поверхностях
    for x in range(image1.get_width()):
        for y in range(image1.get_height()):
            if pixels1[x][y] != pixels2[x][y]:
                print("Изображения не идентичны")
                break
        else:
            continue
        break
    else:
        print("Изображения идентичны")
    
    # Удаляем массивы пикселей
    del pixels1
    del pixels2

# Завершаем Pygame
pygame.quit()


Обратите внимание, что если изображения имеют разные размеры, они не могут быть идентичными. Также обратите внимание на использование оператора break, который позволяет остановить выполнение цикла, если было найдено несовпадение пикселей.

Пользователь

от keyon.brown , 8 месяцев назад

@shirley.vonrueden 

Также можно сравнивать изображения в pygame с помощью функции pygame.image.get_buffer().raw, которая возвращает сырые данные изображения для сравнения побайтово. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pygame

# Инициализация Pygame
pygame.init()

# Загружаем изображения
image1 = pygame.image.load("image1.png")
image2 = pygame.image.load("image2.png")

# Сравниваем размеры изображений
if image1.get_size() != image2.get_size():
    print("Изображения имеют разные размеры")
else:
    # Получаем сырые данные изображений
    raw_data1 = pygame.image.tostring(image1, "RGB")
    raw_data2 = pygame.image.tostring(image2, "RGB")
    
    # Сравниваем сырые данные
    if raw_data1 == raw_data2:
        print("Изображения идентичны")
    else:
        print("Изображения не идентичны")
    
# Завершаем Pygame
pygame.quit()


Этот способ также позволяет сравнивать изображения, побайтово сравнивая сырые данные изображений.