【问题标题】:How to perform perspective distort transformation in VIPS?如何在 VIPS 中进行透视扭曲变换?
【发布时间】:2018-10-16 13:59:06
【问题描述】:

是否可以使用 VIPS 执行以下 ImageMagick perspective distort 命令?如果是这样,命令是什么(使用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

【问题讨论】:

    标签: imagemagick transformation imagemagick-convert vips


    【解决方案1】:

    透视扭曲没有内置的东西,但你可以使用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[2] + 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]
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 2021-11-08
      相关资源
      最近更新 更多