Я сделал код, который должен изменить цвет пикселей, которые находятся на краю изображения. Здесь край - это любой пиксель, цвет которого изменяется больше определенного порога. Ниже вы видите мой код, который работает довольно хорошо (для изображений, по крайней мере, с очень четкими краями). Должна быть возможность написать мой код более простым способом, так как я работаю с np.arrays. Кто-нибудь знает как это сделать? Например, используя np.diff?
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import numpy as np
import math
img2 = mpimg.imread('smiley_picture.png')
img2 = (img2 * 255).astype('uint8')
img3 = img2[:,:,:-1]
def what_is_distance_between_pixels(image, pixel1, pixel2):
r1 = pixel1[0]
g1 = pixel1[1]
b1 = pixel1[2]
r2 = pixel2[0]
g2 = pixel2[1]
b2 = pixel2[2]
distance = np.sqrt((r2-r1)**2 + (g2-g1)**2 + (b2-b1)**2)
return distance
def distance_between_all_pixels(image, threshold):
height = image.shape[0]
width = image.shape[1]
colour = image.shape[2]
for y in range(0,height-1):
for x in range(0,width-1):
for z in range(0,colour):
distance = what_is_distance_between_pixels(image, image[y,x], image[y+1,x])
if distance > threshold:
image[y,x,:] = [250, 0, 0] # Change edge in red
distance_2 = what_is_distance_between_pixels(image, image[y,x], image[y,x+1])
if distance_2 > threshold:
image[y,x,:] = [250, 0, 0] # Change edge in red
print(plt.imshow(image))
distance_between_all_pixels(img3, 200)