我正在尝试拍摄硬币的灰度图像并移动像素以获得新图像。看起来我的代码正在将像素重新分配到新图像中,但最后我看不到任何内容。这是我第一次使用 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
我希望得到某种灰度硬币的修改版本,但由于某种原因,新图像中的所有内容仍然是黑色的。我不知道如何具体上传我的硬币的图像,但它是通过在我的原始图像上运行 Canny 边缘检测生成的,如下所示:https://qph.fs.quoracdn.net/main-qimg-7eee051142768d5ed6cadb8fa44ae435.webp
最佳答案
请确保您的代码正在运行。
这是一个可以帮助您的代码片段
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 生成图像的张量(3D 矩阵)。那么修改像素只是张量元素的重新排列。
关于python - 尝试从图像中移动像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58295640/