Я новичок в 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