Создание нового изображения без использования старого в matplotlib? - PullRequest
0 голосов
/ 14 апреля 2019

Я новичок в python и matplotlib. Я реализовал алгоритм k средних для сжатия и изображения кластеры, а затем нанесение измененного изображения. мой вопрос: я не смог построить новое изображение без использования старый в качестве базы, я попробовал несколько вещей, но не смог получить желаемый результат. и это плохое программирование, если я передаю старое изображение в качестве аргумента, когда я определенно не могу его использовать. Может кто-нибудь помочь, пожалуйста?

Я пытался создать новый ndarray, но он не работал.

Вот моя функция:

def changePic(newPixelList, oldPixel, image_size):
    index = 0
    new_pixels = []
    for pixel in newPixelList:
        oldPixel[index] = pixel.classification
        index+=1
    l = oldPixel.reshape(image_size)
    plt.imshow(l)
    plt.grid(False)
    plt.show()

Как видите, я на самом деле не использую значения oldPixel, просто его структуру. сейчас я покажу вам тип старого пикселя:

Вот мой метод loadPic, где X.copy - это аргумент oldPixel:

def loadPic():
    """
    Load pic to array
    :return: copy of original X, new lisf of pixels, image size
    """
    # data preperation (loading, normalizing, reshaping)
    path = 'dog.jpeg'
    A = imread(path)
    A = A.astype(float) / 255.
    img_size = A.shape
    X = A.reshape(img_size[0] * img_size[1], img_size[2])
    listOfPixel= []
    for pixel in X:
        listOfPixel.append(Pixel(pixel))

    return X.copy(), listOfPixel,img_size

1 Ответ

0 голосов
/ 14 апреля 2019

Попробуйте:

def changePic(newPixelList, oldPixel, image_size, picture_num):
    index = 0
    new_pixels = []
    for pixel in newPixelList:
        oldPixel[index] = pixel.classification
        index+=1
    l = oldPixel.reshape(image_size)
    plt.figure(picture_num)
    plt.imshow(l)
    plt.grid(False)
    plt.show()

Каждый генерируемый вами график должен иметь свой picture_num, чтобы иметь отдельные графики.

...