如何将页面图片拉直,使其看起来像扫描的一样?

2024-04-10

我看过应用程序,想知道如何以编程方式拍摄图像。定义它需要如何转换,以便它看起来与相机平行,而不是倾斜透视。

然后合并多张照片以创建 pdf 文件。例如这个应用程序就是这样做的:


我不会用书籍来做这些琐碎的事情,所以很抱歉我不能推荐任何书籍(尤其是英文的)。你需要做的是这样的:

  1. 输入图像
  2. 找到主要轮廓

    理想情况下整个网格,但即使是外部轮廓也足够了(如果不存在网格)。您需要将轮廓划分为水平(红色)和垂直(绿色)曲线(或点集)。

  3. 通过 4 个“等距”点对轮廓曲线进行采样

    由于图像扭曲(不仅仅是旋转),那么我们至少需要使用双三次插值。为此,我们每个补丁需要 16 点 (Aqua)。

  4. 添加镜像点以覆盖整个网格

    图像上的镜像(黄色)点仅适用于水平轮廓,您也应该对垂直轮廓执行此操作(不适合我在图像中,并且不想为此放大分辨率)以及角点,因此您得到6x6控制点。镜子可以线性完成(就像我做的那样)。

现在转换是这样完成的:

  1. 处理所有像素dst(x0,y0)目标图像的
  2. Handle x,y作为三次插值的参数

    if xs,ys是目标图像分辨率:

    u=(3.0*x)/xs
    v=(3.0*y)/ys
    

    现在通常对参数进行三次插值t=<0.0,1.0) so
    if u=<0.0,1.0> use t=u和控制点0,1,2,3.
    if u=<1.0,2.0) use t=u-1.0和控制点1,2,3,4
    if u=<2.0,3.0> use t=u-2.0和控制点2,3,4,5

    垂直轮廓也是如此v。计算xi,yi作为双三次插值(u,v)。并复制像素:

    dst(x,y)=src(xi,yi);
    

    这只是最近邻,但您也可以使用双线性...作为三次曲线,我会使用它多项式 https://stackoverflow.com/a/22582447/2521214.

    双三次插值背后的想法很简单。计算参数对应的点u4 个水平轮廓上。这将为您提供垂直方向上最终三次插值的 4 个控制点,v作为参数。生成的坐标是您的源像素位置。

欲了解更多信息,请参阅:

  • 如何产生多点线性插补? https://stackoverflow.com/a/30438865/2521214
  • 双三次插值 https://en.wikipedia.org/wiki/Bicubic_interpolation
  • OpenCV 鸟瞰图,不丢失数据 https://stackoverflow.com/a/39316776/2521214

如果您没有网格,请使用任何可以用作网格的信息。例如,文本行可以被视为此轮廓......

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

如何将页面图片拉直,使其看起来像扫描的一样? 的相关文章

随机推荐

  • 适用于 Android 的 USB 主机

    I am trying to communicate with my freeduino board which is similar to arduino uno via usb through android device nexus
  • 在Java中检查服务器上的路径是否存在[重复]

    这个问题在这里已经有答案了 我正在创建一个 Java 程序 在其中将文件上传到特定路径上的服务器 我在用jSch for sftp 因此 在上传文件之前 我想检查服务器上是否存在给定的目录 if path exists upload fil
  • 使用 AVAudioEngine 将 AVAudioInputNode 连接到 AVAudioUnitEffect

    我想处理来自设备内置麦克风的音频 AVAudioInputNode 带有音频单元效果 AVAudioUnitEffect 对于我的例子 我正在使用AVAudioUnitReverb 连接中AVAudioUnitReverb导致应用程序崩溃
  • Swift 3:从 UIBezierPath 创建 UIImage

    我有一个UIBezierPath 我最终需要一个UIImageView从中 现在我正在尝试首先创建一个UIImage 然后是一个UIImageView从那 我正在快速工作 并且我已经研究过类似的问题 并且答案要么不起作用 要么产生形状而不是
  • ASP.NET MVC 1 向前兼容 ASP.NET MVC 2 吗?

    我可以使用 MVC 2 程序集顺利运行 MVC 1 应用程序吗 我知道一些 3rd 方工具在 MVC 2 中出现了问题 但我们假设我没有使用这些其他工具 曾经有过重大变化 http go microsoft com fwlink LinkI
  • Pandas:将 Lambda 应用于多个数据帧

    我试图弄清楚如何同时将 lambda 函数应用于多个数据帧 而不需要先将数据帧合并在一起 我正在处理大型数据集 gt 60MM 记录 并且需要格外小心内存管理 我希望有一种方法可以将 lambda 应用于底层数据帧 这样我就可以避免首先将它
  • SSIS Excel 目标空白

    我正在调试一个 SSIS 包 该包从 SQL Server 数据开始 对其进行转换 然后将其放入 Excel 文件中 我在工作中经常这样做 以前从未遇到过这个问题 Excel 文件中没有写入任何行 我将数据查看器附加到通向 Excel 目标
  • Android:如何以编程方式连接/断开 OTG

    我想在我的 Android 设备中以编程方式连接和断开 USB OTG 笔式驱动器 硬盘驱动器等 对于USB 我使用以下路径在连接到PC时绑定 取消绑定USB sys bus usb drivers usb bind or unbind 我
  • Python:读取文件时如何忽略#comment行

    在Python中 我刚刚从文本文件中读取了一行 我想知道如何编写代码来忽略行开头带有哈希 的注释 我认为应该是这样的 for if line contain then process line else end for loop 但我是Py
  • JavaScript 对象如何引用其自身的值? [复制]

    这个问题在这里已经有答案了 假设我有以下 JavaScript var obj key1 it key2 key1 works alert obj key2 此错误显示 key1 未定义 我努力了 this key1 this key1 o
  • 单个部分的垂直滚动

    我必须制作一个具有垂直滚动过渡效果的部分 请观看此处的视频以供参考 https drive google com file d 1Fy4BDqc0 LDrPnEVYuQZdiJ0Pk9qDXA5 view usp sharing https
  • 将自定义对象传递给 Web 服务

    我正在使用 C 并且有 Windows 窗体和 Web 服务 我有一个自定义对象 我想将其发送到网络服务 有时 该对象可能包含大量数据 作为最佳性能 将自定义对象发送到 Web 服务的最佳方式是什么 Web 服务旨在处理自定义对象 只要它们
  • 使用 cython 加速数千个集合操作

    我一直在努力克服对 Cython 的恐惧 恐惧是因为我对 c 或 c 一无所知 我有一个函数需要 2 个参数 一个集合 我们称之为testSet 和一个集合列表 我们称之为targetSets 然后该函数会迭代targetSets 并计算与
  • 如何保护 Google Kubernetes Engine (GKE) 中的只读端口 10255?

    我创建了一个 GKE 私有集群 版本 1 13 6 gke 13 使用以下命令 gcloud container clusters create a cluster with user pass network vpc name subne
  • 实现编译时机制检查字符串的唯一性

    定义我的问题的最简单方法是我正在尝试实现一种机制来检查是否已使用相同的字符串 或一对 数字 字符串 我希望使用 C 预处理器以智能方式实现此机制 我还希望这种机制在调试模式下出现冲突或运行时错误时 通过检查断言 给我编译错误 我们不希望开发
  • IIS 替换部分 url

    我正在尝试使用 iis 中的 url 重写将 url 中的 se 替换为 sv 网址如下所示 www somedomain com se baadmarked 巴德 并且应该看起来像这样 www somedomain com sv baad
  • 网络安全字体粗细——如何变细?

    当我在 Photoshop 中设计时 我的字体又薄又清晰 但当我在 CSS 中声明字体时 即使使用 font weight lighter 字体总是显得更粗 也许这就是浏览器渲染字体的方式 在 IE 中字体保持细长 但我想知道是否有任何技巧
  • 以编程方式检索 OS X 磁盘分区 UUID

    我有一个分区的路径 如何在不使用终端命令的情况下以编程方式检索该分区的 UUID 举个例子会更有帮助 diskutil info grep UUID 从 C 运行它作为读者的练习 如果您想要根目录以外的分区 您可以指定挂载点或设备名称 例如
  • sp_spaceused - 如何测量 SQL 中所有表的大小(以 GB 为单位)

    继讨论之后如何在 SQL 中测量表中的表大小 以 GB 为单位 https stackoverflow com questions 7071473 我正在寻找一种解决方案来使用存储过程单独测量 SQL Server 的所有表所使用的空间sp
  • 如何将页面图片拉直,使其看起来像扫描的一样?

    我看过应用程序 想知道如何以编程方式拍摄图像 定义它需要如何转换 以便它看起来与相机平行 而不是倾斜透视 然后合并多张照片以创建 pdf 文件 例如这个应用程序就是这样做的 我不会用书籍来做这些琐碎的事情 所以很抱歉我不能推荐任何书籍 尤其