gpt4 book ai didi

ios - 使用 Core Image 在 Swift 中复制 cv::warpAffine

转载 作者:搜寻专家 更新时间:2023-10-31 23:07:32 24 4
gpt4 key购买 nike

我正在尝试使用 Core Image 完全在 Swift 中复制面部对齐算法。但是,我已经无法尝试在 Swift 中从 opencv 复制一个简单的 warpAffine

Python代码:

print(M) #M is a matrix calculated using some face detection code
print("let transform = CGAffineTransform(a: {0[0][0]}, b: {0[1][0]}, c: {0[0][1]}, d: {0[1][1]}, tx: {0[0][2]}, ty: {0[1][2]})".format(M))
warped = cv2.warpAffine(img,M,(image_size[1],image_size[0]), borderValue = 0.0) #warped is the correctly aligned image, image_size is 112,112

我的快速版本:

import UIKit
import CoreImage

let ctx = CIContext()
let image = UIImage(named: "lg.jpg")
let ciimage = CIImage(image: image!)
let transform = CGAffineTransform(a: 0.390825773796, b: -0.0333640808264, c: 0.0333640808264, d: 0.390825773796, tx: -53.8777275485, ty: -23.0859985227)
let aligned = ciimage?.transformed(by: transform)
let size = aligned!.extent
let center = CGPoint(x: size.midX, y: size.midY)
let cropRect = CGRect(x: center.x-56, y: center.y-56, width: 112, height: 112)
let cropped = aligned!.cropped(to: cropRect)

swift 版本 (cropped) 给出的图像向左旋转了几度,裁剪太低了。

我已经尝试重新排序转换参数,因为我猜我哪里出错了。但是根据opencv docsCGAffineTransform docs参数应该是正确的。

最佳答案

很遗憾,我无法使用 CoreImage 复制它。我确实让它与 UIImage 配合得很好:

extension UIImage {
func transformed(by transform: CGAffineTransform, size: CGSize) -> UIImage {
UIGraphicsBeginImageContext(size)
let c = UIGraphicsGetCurrentContext()
let orig = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
c?.concatenate(transform)
self.draw(in: orig)
let result = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return result!
}
}

虽然这确实有效,但从 CIImage 转换为 UIImage 并返回,证明对于我的用例来说太慢了。

关于ios - 使用 Core Image 在 Swift 中复制 cv::warpAffine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49281334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com