2017-07-03 61 views
0

新しいApple Vision APIのVNImageTranslationAlignmentObservationを使用して、CGAffineTransformを返します。アイデアは、一緒にマージできる2つのイメージを渡し、そうすることができるようにCGAffineTransformを返します。私はCGAffineTransformが返されるようにコードが動作するように管理していますが、多くの情報を読み込んだ後、情報で2つのイメージをどのようにマージすることができるかが分かりません。2つの画像を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)

のようなものです私が手に変換私はこの2枚の二つの画像が渡さ適用することができますどのように?

私はいくつかの例でプレーしてきた(唯一の肖像画像だけでなく、景観で動作するはずです)、これが働いている

答えて

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

は、それが動作しない場合、私に教えてください(あれば、あなたのサンプル画像をアップロードあなたがすることができます)と私はそれを修正します。

関連する問題