Попытка переместить пиксели с изображения - PullRequest
1 голос
/ 09 октября 2019

Я пытаюсь взять изображение монеты в градациях серого и переместить пиксели вокруг для нового изображения. Похоже, мой код переназначает пиксели в новое изображение, но я ничего не вижу в конце. Я впервые использую PIL и переполнение стека!

from PIL import Image as image
import scipy.misc

im = image.open('dilation.jpg')
imageW = im.size[0]
imageH = im.size[1]
new = image.new("1",(imageW, imageH))
pixels = new.load()
b = round(imageW / 2)
n = b + 1

for x in range(imageW):
    for y in range(imageH):
        xy = (x,y)
        rgb = im.getpixel(xy)
        for i in range(3, -3,-1):          
        #Set new xy coordinates
            new_x = round(n * math.sin(i) + (width / 2))
            new_y = round(n * math.cos(i) + (height / 2))
            if new_x <= imageW and new_y <= imageH:
                pixels[new_x, new_y] = rgb

new

Я ожидал получить какую-то измененную версию своей монеты в оттенках серого, но все в новом изображении по какой-то причине все еще черное. Я не могу понять, как конкретно загрузить изображение своей монеты, но оно было сгенерировано с помощью функции обнаружения края Канни на моем исходном изображении, например: https://qph.fs.quoracdn.net/main-qimg-7eee051142768d5ed6cadb8fa44ae435.webp

1 Ответ

0 голосов
/ 09 октября 2019

Пожалуйста, убедитесь, что ваш код работает.

Вот фрагмент кода, который поможет вам

import math
import numpy as np

from PIL import Image


im = Image.open('bee_hive.jpeg')
im = np.array(im)

imageW = im.shape[0]
imageH = im.shape[1]
imageC = im.shape[2]

new = np.zeros(im.shape)

for x in range(imageW):
    for y in range(imageH):
        rgb = im[x,y,:]
        for i in range(3, -3,-1):
        #Set new xy coordinates
            new_x = round(n * math.sin(i) + (imageW / 2))
            new_y = round(n * math.cos(i) + (imageW / 2))
            if new_x <= imageW and new_y <= imageH:
                new[new_x, new_y, :] = rgb


new = Image.fromarray(new.astype('uint8'), 'RGB')
new.show()

Основная идея - использовать numpy для генерации тензора (трехмерной матрицы) вашего изображения. Тогда изменение ваших пикселей - это просто перестановка элементов тензора.

...