怎样才能将页面的图片整理成看起来像被扫描的图片?

问题描述:

我看过应用程序,想知道如何以编程方式拍摄图像。定义它需要如何转换,使其看起来与摄像机平行,而不是倾斜的视角。怎样才能将页面的图片整理成看起来像被扫描的图片?

然后合并多张照片创建一个pdf文件。例如这个应用程序:https://play.google.com/store/apps/details?id=com.appxy.tinyscan&hl=en

+0

http://docs.opencv.org/trunk/da/d6e/tutorial_py_geometric_transformations.html –

+0

请参阅[OpenCV Birdseye view without data of](http ://*.com/a/39316776/2521214)所以找到边缘点,并使用双线性或双三次插值来矫直图像 – Spektre

+0

,这是超过我的头,直观地我可以告诉发生了什么,但相当迷茫。任何你推荐的书都会让我加快速度。 –

我不使用书籍这种琐碎的事情,所以对不起,我不能推荐任何(尤其是英语)。你需要做的是这样的:

control points

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

    理想整个电网,但即使外轮廓就足够了(如果没有网格存在)。您需要将轮廓分成水平(红色)和垂直(绿色)曲线(或一组点)。

  3. 通过样品轮廓曲线4“等距离”指出

    作为图像失真(不只是旋转),那么我们需要至少双三次插值来使用。为此,我们需要每个补丁16点(Aqua)。

  4. 添加镜像点,覆盖全网

    镜像(黄色),在图像上只为水平方向的轮廓,你应该做的,这也为垂直方向的轮廓(没有适合我的图像中并没有指出只想为此放大分辨率)以及角点,所以你得到了控制点数6x6。镜子可以线性完成(就像我做的那样)。

现在变换这样进行:

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

    如果xs,ys为目标图像的分辨率,然后:

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

    现在立方插值的参数t=<0.0,1.0)所以
    如果u=<0.0,1.0>使用t=u和控制点0,1,2,3通常完成。
    如果u=<1.0,2.0)使用t=u-1.0和控制点1,2,3,4
    如果u=<2.0,3.0>使用t=u-2.0和控制点2,3,4,5

    这同样适用于垂直方向的轮廓和v。作为(u,v)的双三次插值计算xi,yi。并且拷贝像素:

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

    这仅仅是近邻,但你也可以使用双线性这个......至于三次曲线,我会用这个polynomial

    双立方插值背后的想法很容易。计算点对应4个水平轮廓上的参数u。这会给你4个垂直方向的最终三次插值控制点和v作为参数。生成的坐标是您的源像素位置。

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

如果你没有一个网格使用,可以用来作为一个任何信息。例如,文本行可以被认为是一个轮廓...

+0

我会在两天内回复任何问题,这对我来说是很多东西,所以忍受着我。 –

+0

我以前曾问过这个问题,但没有人能回答。这不是微不足道的,我会花6个月的课程,然后感觉舒适。 –

+0

我是一个web开发者,如果你写了一本书,id就买它。这就需要新手程序员使用简单的英语来处理图像处理中的高级概念。 –