倾斜图像的一侧

Skew one side of image

我将在 Raspberry Pi 上做一个项目,通过投影仪显示图像。该图像是一个矩形,其长度恰好是其宽度的两倍。由于我是通过投影仪显示的,这意味着离项目最远的一侧最终会比最近的一侧窄,所以我需要扩大图像的那一侧。

有人可以为我指明正确的实施方向吗?我什至不知道正确的术语是什么来完善它并研究我需要做的数学。

你问的是 "keystone correction," 我相信。许多视频投影仪可以自动执行此操作,因此值得在编写一堆代码之前进行检查:)

以下是使用 ImageMagick convert 实用程序执行此操作的方法。您需要知道图像的大小才能开始。为了便于讨论,我们假设它是 889 x 746。此外,我们假设我们希望图像底部 "thinner" 比顶部高 60 像素,并且 "thinning" 左右对称垂直中心线。

所以我们称左上角为 (1,1)、右上角为 (889,1)、左下角为 (1,746) 和右下角为 (889,746)。左上角和右上角的像素保持原样;左下角 "moves" 从 (1,746) 到 (61,746)。右下移动到 (829,746),因为 889-60 是 829 -- 这是向左移动。

convert -distort perspective命令需要四个像素的坐标,它们的移动前和post-移动值。然后它计算如何移动所有其他像素,使得原始中的直线保持笔直。因此,采用上面的计算值,我们需要:

convert in.png -virtual-pixel transparent -distort perspective \
   '1,1  1,1         \ 
    889,1 889,1      \
    1,746 60,746     \
    889,746 829,746' \ 
    out.png

当然,间距不是必需的:它只是为了显示数字如何与上面的计算值对齐。

当然,您需要调整数字以适合您的图像大小和所需的校正程度。 ImageMagick 适用于 Raspberry Pi,并且很容易在应用程序代码中嵌入对 convert 的调用。