Mam plik .png i chcę przejrzeć obraz, aby sprawdzić, czy jest w nim określona wartość RGB. Na przykład, powiedzmy, że mam obraz i chcę sprawdzić, czy wartość RGB (255, 0, 0) jest gdzieś na obrazku. Jak miałbym to zrobić w Pythonie? Dzięki!

-2
ThatComputerGuy 1 kwiecień 2020, 03:53

3 odpowiedzi

Najlepsza odpowiedź

Polecam użycie PIL-Getpixel lub PIL-Getdata

from PIL import Image

im = Image.open('whatever.png').convert("RGB")

# get pixels
pixels = [im.getpixel((i, j)) for j in range(im.height) for i in range(im.width)]

# or
pixels = [i for i in im.getdata()]

#check if tuple of pixel value exists in array-pixel

print((255, 0, 0) in pixels) #True if exists, False if it doesn't
1
AlexDotis 1 kwiecień 2020, 22:33

To powinno działać ..

import cv2
import numpy as np

img = cv2.imread(r'circle.png')
ind = np.where((img[:, :, 0]==255) & (img[:, :, 1]==0) & (img[:, :, 2]==0))
answer = list(zip(ind[0], ind[1]))
print(answer) # Prints row and column indices in tuples
0
Rohan Sharma 3 kwiecień 2020, 23:39

Możesz użyć pakietu cv2, aby załadować obraz i numpy, aby przeszukać go jako tablicę:

import cv2
import numpy as np

img = cv2.imread('one.png')

pixel = img[801,600]

print (pixel) # pixel value i am searching for

def search_array():
    pixel_tile = np.tile(pixel, (*img.shape[:2], 1))
    diff = np.sum(np.abs(img - pixel_tile), axis=2)
    print("\n".join([f"SUCCESS - {idx}" for idx in np.argwhere(diff == 0)]))

if __name__ == "__main__":
    search_array()

Zaczerpnięte z mojej odpowiedzi tutaj.

0
DBat 1 kwiecień 2020, 00:56