如果是最佳表现页面,
使用核心图形或图像I/O函数来裁剪或降样本,例如函数CGImageCreateWithImageInRect或CGImageSourceCreateThumbnailAtIndex。
然而,我想知道,如果你只在核心图像中工作,那么这是多么的真实。如果我有一个图像需要被降采样,然后与其他东西一起进行过滤,那么转换为CGImage、下采样、然后转换回CIImage以供其他用途不是更低的效率吗?
我想知道,如果下采样是您正在执行的图像处理算法的一部分,那么在核心图像框架中工作是否更好。当然,如果上面的速度更快的话,我想试一试,但我不确定是否有其他方法能尽快降低样品的样品。不,不幸的是,CILanczosScaleTransform是可怕的慢,我希望核心图像有一个更快的方式在构建之外,以缩放图像。
发布于 2016-10-18 16:48:55
我正在使用下面的代码,我在这里找到了:
http://flexmonkey.blogspot.com/2014/12/scaling-resizing-and-orienting-images.html
extension UIImage {
public func resizeToBoundingSquare(_ boundingSquareSideLength : CGFloat) -> UIImage {
let imgScale = self.size.width > self.size.height ? boundingSquareSideLength / self.size.width : boundingSquareSideLength / self.size.height
let newWidth = self.size.width * imgScale
let newHeight = self.size.height * imgScale
let newSize = CGSize(width: newWidth, height: newHeight)
UIGraphicsBeginImageContext(newSize)
self.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))
let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
return resizedImage!
}
}
在缩小大小和/或使各种像素大小一致之后,我使用CI过滤器,包括自定义和链接。我没有看到任何性能或记忆问题。
发布于 2021-03-29 12:35:03
我认为,通过在CGAffineTransform本身上使用CIImage (标度X,y),我已经看到了最快的性能。我尝试了CGImagesource缩略图方法,开销方法超过了任何好处,可能是因为必须进行更多的源转换。请注意,我是从一个CVSampleBuffer开始的,所以我的链如下所示:
CVSampleBuffer -> CIImage ->与CGAffineTransform -> CIFiltering用过滤链.直接输入到VNRequest。我能够得到60赫兹直接从相机实时处理使用这种方法,虽然我想进一步优化它,这就是为什么我正在寻找一个更快的选择!
https://stackoverflow.com/questions/39284617
复制