T
T
Talyan2018-09-24 09:16:20
Python
Talyan, 2018-09-24 09:16:20

How to compare lists with error?

Hello. To begin with, I will write information about what and why, to make it clearer what it is for:
There is a function for calculating the color of pixels.
It works like this:
a one-pixel-high section of the screen is taken, where the player's life bar is located.

pil_image_hp = get_screen(тут координаты участка высотой в пиксель)

Each pixel is compared to the color of the filled lives
hp_color = [58, 37, 32] # это цвет хелсов

        pixels = pil_image_hp[0].tolist() #берем одну строку пикселей из вырезки
        for pixel in pixels:
            print pixel
            if pixel == hp_color: #если цвет пикселя совпадает с цветом хелсов, прибавляем общие хелсы
                filled_red_pixels += 1

But the fact is that, apparently due to the fact that the life bar in the game has some transparency, when an object hits the life bar, the color of the pixels changes by the smallest amount. Because of this, the number of health color pixels is calculated incorrectly:
The colors of the found pixels:
[58, 36, 32] - видна полоса здоровья
[58, 37, 32] - видна полоса здоровья
[58, 36, 32] - видна полоса здоровья
[58, 37, 32] - видна полоса здоровья
[58, 37, 32] - видна полоса здоровья
[58, 36, 32] - видна полоса здоровья
[58, 37, 32] - видна полоса здоровья
[58, 36, 32] - видна полоса здоровья
[57, 35, 31] - видна полоса здоровья
[148, 37, 24] - отсутствует цвет полосы здоровья (потраченые хелсы)
[147, 37, 24] - отсутствует цвет полосы здоровья (потраченые хелсы)
[147, 37, 24] - отсутствует цвет полосы здоровья (потраченые хелсы)
[147, 37, 24] - отсутствует цвет полосы здоровья (потраченые хелсы)
[147, 37, 24] - отсутствует цвет полосы здоровья (потраченые хелсы)
[147, 37, 24] - отсутствует цвет полосы здоровья (потраченые хелсы)
[147, 37, 24] - отсутствует цвет полосы здоровья (потраченые хелсы)
[147, 37, 24] - отсутствует цвет полосы здоровья (потраченые хелсы)

As you can see, the spread is quite small - only one or two.
How can you compare lists with scatter?
So the problem is this line:
if pixel == hp_color:

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
Andrey Dugin, 2018-12-15
@flapflapjack

numpy.isclose
numpy.allclose
PS Working with images and arrays of numbers in loops in Python is a notable perversion.

E
EugeneSCH, 2018-10-02
@EugeneSCH

compare each list element with variance
>>> pixel = [57, 35, 31]
>>> hp_color = [58, 36, 32]
>>> delta = 2
>>> if False in [_ for _ in map(lambda x,y: abs(xy) < delta, pixel, hp_color) if not _]:
... print('Colors are different')
... else:
... print('Colors match')
...
Colors match
>>>

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question