Вопрос: определение краев на изображении с помощью Numpy - PullRequest
0 голосов
/ 02 мая 2020

Я сделал код, который должен изменить цвет пикселей, которые находятся на краю изображения. Здесь край - это любой пиксель, цвет которого изменяется больше определенного порога. Ниже вы видите мой код, который работает довольно хорошо (для изображений, по крайней мере, с очень четкими краями). Должна быть возможность написать мой код более простым способом, так как я работаю с 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...