将两个图像与CGAffineTransform结合使用

问题描述:

我使用新的Apple Vision API的VNImageTranslationAlignmentObservation获取返回的CGAffineTransform。这个想法是,你将它传递给两个可以合并在一起的图像,并返回CGAffineTransform,以便你可以这样做。我已经设法让代码工作,以便我得到一个CGAffineTransform返回,但经过很多阅读im在损失,因为我可以如何合并两个图像的信息。将两个图像与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)

我如何申请在通过这两两个图像?

我一直在玩一些例子(肖像图片仅但应与景观也行),这已工作:

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) 
    } 
} 

让我知道,如果它不能正常工作(如果你上传的样本图像你可以),我会解决它。