【问题标题】:Keep track of reference pixel in PIL imgage while doing transformations在进行转换时跟踪 PIL 图像中的参考像素
【发布时间】:2021-05-13 02:28:24
【问题描述】:

我想在 PIL 图像中跟踪一个点/像素以供参考,同时我进行(透视)转换并切断透明边框。

from PIL import Image

# load image
img = Image.open("img.png")

# do some perspective transformation
img.transform(new_size, Image.PERSPECTIVE, mapping_coeffs)

# cut the borders
img = img.crop(img.getbbox())

对于裁剪,我可以通过减去填充的大小来跟踪位置。但是对于透视变换,甚至连续多次变换,我该如何做到这一点呢?

【问题讨论】:

  • 您的代码在哪里:'对于裁剪,我可以通过减去填充的大小来跟踪位置。' ?? .当您调整图像大小时,您的参考像素将不再存在,或者不存在?
  • 正在考虑根据新尺寸重新计算像素位置,不确定它是否总是有效
  • 猜你需要知道调整大小是如何工作的,以确定哪个像素代表你的初始像素
  • ref = [x,y]; box = img.getbbox(); ref_new = [ref[0]-box[0], ref[1]-box[1] box的前两个元素代表x和y的下界。

标签: python python-imaging-library


【解决方案1】:

对于其他有同样问题的人,我使用 NumPy 制作了一张只有白色参考像素的黑色图像,并以与我的图像相同的方式对其进行了转换。

from PIL import Image
import numpy as np

# get black img with the same size
refArray = np.zeros(PILimg.size)

# make the reference pixel white
refArray[xRef, yRef] = 1e8

# to PIL image object 
refImg = Image.fromarray(refArray.T)  

对参考图像做同样的变换,然后在变换后的参考图像中找到最大值

ref = np.array(refImg).T
xRef, yRef = np.unravel_index(np.argmax(ref), ref.shape)

编辑:对于某些转换,像素会消失,这可以通过使用一个小正方形像素 (5x5) 而不是单个像素来解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2023-04-07
    • 2016-05-29
    • 2011-10-30
    相关资源
    最近更新 更多