如何在VIPS中进行透视扭曲变换?

2023-12-08

是否可以执行以下 ImageMagick透视扭曲使用 VIPS 命令?如果是这样,命令是什么(使用ruby-vips)?

$ convert my_file.png -matte -virtual-pixel transparent +distort Perspective '0,0,0,60 1500,0,300,0 0,2100,0,2310 1500,2100,300,2100' -crop 300x2310+0+0


没有内置的透视扭曲功能,但您可以使用mapim:

http://jcupitt.github.io/libvips/API/current/libvips-resample.html#vips-mapim

#!/usr/bin/ruby
  
require 'vips'

image = Vips::Image.new_from_file ARGV[0]

# perspective distortion: each pixel (x', y') in the output image is
# interpolated from pixel (x, y) in the input using:
#
#   x' = (A x + B y + C) / (G x + H y + 1)
#   y' = (D x + E y + F) / (G x + H y + 1)
#
# where the constants A .. H are from the transform matrix T
#
# T = [A, B, .. H]

T = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0003, 0.0001]

# make an index image where pixels have the value of their (x, y) coordinates
i = Vips::Image.xyz image.width, image.height

x = (i[0] * T[0] + i[1] * T[1] + T[2]) / (i[0] * T[6] + i[1] * T[7] + 1)
y = (i[0] * T[3] + i[1] * T[4] + T[5]) / (i[0] * T[6] + i[1] * T[7] + 1)

# join up x and y as a map image
m = x.bandjoin y

# and use it to transform our original image
image = image.mapim m 

image.write_to_file ARGV[1]

当然,您还需要一些东西来计算一组连接点的变换。

编辑:修正错别字

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在VIPS中进行透视扭曲变换? 的相关文章

随机推荐

  • 将 ASP.NET MVC Razor @helper 函数转换为帮助器类的方法

    考虑以下 ASP NET MVC razor 视图片段 它定义了一个帮助器 helper FieldFor
  • 当用户连续键入时,每 500 毫秒执行一次函数不超过一次

    我正在尝试实现类似自动完成的功能 因此我在以下时间运行该函数oninput事件发生 因为我正在发出获取请求 而不是在每次更改时运行它 所以我希望在 也许 500 毫秒内运行它不超过一次 有没有办法做到这一点
  • 多次调用 window.open() 第一次后失败

    我有一个脚本可以循环访问多个网址并在新选项卡中打开它们 以前可以用 但现在只能打开第一个 甚至有一个 w3schools 测试编辑器据说可以打开多个窗口 但在第一个窗口之后它也失败了 https www w3schools com jsre
  • 友好地获取ffmpeg信息

    每次我尝试使用 ffmpeg 获取有关我的视频文件的一些信息时 它都会吐出很多无用的信息和好的信息 我在用着ffmpeg i name of the video mpg 有没有可能以友好的方式得到它 我的意思是 JSON 会很棒 甚至丑陋的
  • PWA 关闭时发送通知

    我制作了一个 PWA 待办事项列表应用程序 链接到应用程序 使用角度 我现在计划添加通知 以便在应用程序关闭时可以到达用户 由于它是一个离线工作的 PWA 我不能依赖推送通知 提前致谢 你可以利用Web 定期后台同步 API您也可以离线运行
  • 使用 Android 进行录制时显示不断更新的双精度(频率)

    我正在构建一个 Android 应用程序 它使用 FFT 算法显示持续音符的频率 我正在使用 Jtransform 方法 目前我的问题是我无法在屏幕上显示频率 以下代码是 fft 频率计算和 AsynchTask 应在文本框中显示频率 im
  • Python 列表到 XML,反之亦然

    我编写了一些将 python 列表转换为 XML 元素的 python 代码 它用于与 LabVIEW 交互 因此采用了奇怪的 XML 数组格式 无论如何 这是代码 def pack data create the result eleme
  • 无法转换日期 - LocalDate 减去一天

    我对日期及其从 Date 到 LocalDate 的传递有疑问 主要错误在于年份为 1700 年的日期 我尝试过两个不同的日期 每当年份是 1700 年时 我就会少一天 Date dto Instant inst dto toInstant
  • android 如何限制ListView中列表项的显示和按钮显示更多

    我正在从数据库获取数据并在 ListView 中使用自定义列表适配器进行显示 我只需要在 ListView 中显示 10 个项目 在第 10 项之后 会显示一个带有文本 显示更多 的按钮 当单击此按钮时 会在列表视图中显示数据库中的更多 1
  • raw 无法解析或不是字段

    我正在我的应用程序中构建 MP3 播放器 但收到一条错误消息 指出 raw 无法解析或不是字段 mMediaPlayer MediaPlayer create this R raw test cbr 我不确定 R raw test cbr
  • javascript 闭包无法正常工作

    看第一段代码 var count 0 function addLinks var count 0 this count var is increasing for var i 0 link i lt 5 i link document cr
  • 如何使用 Microsoft Graph 更新 SharePoint 中的查找字段和用户字段?

    我正在寻找一种如何使用 Microsoft graph 更新查找字段和用户字段的方法 我可以读取该项目 但即使我输入了正确的 ID 值 也找不到创建或更新此类字段的方法 现在支持通过 Microsoft Graph API 更新查找字段 假
  • 带有循环调试打印的 ansible 寄存器不起作用

    我有一个简单的剧本 应该显示我的服务状态 我想查看机器的输出以查看状态是否处于活动状态 所以我使用了调试打印 如下所示 name name of services shell systemctl status item with items
  • Flutter:更新列表中的特定索引(Firestore)

    究竟如何根据索引更新列表中的特定值 例如 在以下列表中 0 first name name0 last name lastName0 1 first name name1 last name lastName1 如何仅更新 lastName
  • glassfish 的基本身份验证失败

    首先 我对这篇长文表示歉意 这是我之前问题的延续 7u21更新后弹出需要验证的窗口 关于这个问题 但我缩小了搜索范围 简而言之 自 Java 7u21 以来 我的 BASIC 身份验证似乎已被破坏 通过 JNLP 文件启动的小程序根本无法稳
  • 使用清晰的代码行异步调用插槽,无需连接到它

    我遇到了相当奇怪的错误 QAction trigger导致出现阻塞对话框 这导致我的服务器调用trigger卡住 例如 在对话框关闭之前无法处理套接字信号 我想出了一个解决方法 我连接信号void triggerWorkaround 到插槽
  • 模态中的文本字段

    如果我们使用列表视图 当键盘出现时 文本字段就会上升 但在模式中则不会 抱歉 我不知道如何正确解释它 我只会用图像向您展示 模式代码 showModalBottomSheet shape RoundedRectangleBorder bor
  • ASP.NET Web 应用程序消息框

    在 asp net windows 窗体应用程序中 您可以在后面的 C 代码中使用 MessageBox Show Here is my message ASP NET Web 应用程序中有类似的东西吗 我可以从后面的 C 代码中调用一些向
  • 有人可以澄清 Android 上下文引用吗?

    我的误会还在继续 任何人都可以引用正确使用的参考资料get Context 我得到了关于使用的相互矛盾的建议getBaseContext getApplicationContext and getContext 我的理解是使用this是一个
  • 如何在VIPS中进行透视扭曲变换?

    是否可以执行以下 ImageMagick透视扭曲使用 VIPS 命令 如果是这样 命令是什么 使用ruby vips convert my file png matte virtual pixel transparent distort P