【问题标题】:Combine two images with CGAffineTransform使用 CGAffineTransform 组合两个图像
【发布时间】:2017-12-07 00:20:19
【问题描述】:

我正在使用新的 Apple Vision API 的 VNImageTranslationAlignmentObservation 来获取返回的 CGAffineTransform。这个想法是,您将两个可以合并在一起的图像传递给它,然后它返回 CGAffineTransform 以便您可以这样做。我已经设法让代码正常工作,以便我返回一个 CGAffineTransform,但经过大量阅读后,我不知如何将两个图像与信息合并。

我的代码在这里:

import UIKit
import Vision

class ImageTranslation {

    let referenceImage: CGImage!
    let floatingImage: CGImage!
    let imageTranslationRequest: VNTranslationalImageRegistrationRequest!

    init(referenceImage: CGImage, floatingImage: CGImage) {
        self.referenceImage = referenceImage
        self.floatingImage = floatingImage
        self.imageTranslationRequest = VNTranslationalImageRegistrationRequest(targetedCGImage: floatingImage, completionHandler: nil)
    }


    func handleImageTranslationRequest() -> UIImage {
        var alignmentTransform: CGAffineTransform!
        let vnImage = VNSequenceRequestHandler()
        try? vnImage.perform([imageTranslationRequest], on: referenceImage)
        if let results = imageTranslationRequest.results as? [VNImageTranslationAlignmentObservation] {
            print("Image Transformations found \(results.count)")
            results.forEach { result in
                alignmentTransform = result.alignmentTransform

                print(alignmentTransform)
            }
        }

        return applyTransformation(alignmentTransform)

    }

    private func applyTransformation(_ transform: CGAffineTransform) -> UIImage {
        let image = UIImage(cgImage: referenceImage)
        return image
    }
}

我得到的打印转换是这样的CGAffineTransform(a: 1.0, b: 0.0, c: 0.0, d: 1.0, tx: 672.0, ty: 894.0)

如何将这两个应用到传入的两个图像中?

【问题讨论】:

  • 我认为是你在 applytransformation 中没有做任何事情造成的。

标签: swift ios11 swift4 apple-vision


【解决方案1】:

我一直在玩一些示例(仅限肖像图像,但也应该适用于风景),这很有效:

func mergeImages(first image1:UIImage, second image2:UIImage, transformation: CGAffineTransform) -> UIImage {

    let size = CGSize(width: image1.size.width + image2.size.width - (image2.size.width - transformation.tx), height: image1.size.height + image2.size.height - (image2.size.height - transformation.ty))

    let renderer = UIGraphicsImageRenderer(size: size)

    return renderer.image { context in
        let pointImg2 = CGPoint.zero.applying(transformation)
        image2.draw(at: pointImg2)

        let pointImg1 = CGPoint.zero
        image1.draw(at: pointImg1)
    }
}

如果它不起作用,请告诉我(如果可以,请上传您的示例图像),我会修复它。

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2011-05-21
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多