CIPerspectiveCorrection 滤镜 returns 图像翻转和反转
CIPerspectiveCorrection filter returns image flipped and inverted
我正在使用 CIPerspectiveCorrection Filter,我的问题是我返回的图像结果是镜像的、上下颠倒的,并且用于透视校正的点似乎参考了错误的轴或轴方向。
为了隔离问题,我一直在处理 1024 x 1024 的测试图像,并且我正在传递一个完美的矩形区域。我仍然以垂直和水平翻转的图像结束。
这是我的函数,returns 给定图像和一组点的裁剪 CIImage 实例:
private func _getCroppedImageWithImage(image:CIImage, topLeft:CGPoint, topRight:CGPoint, botLeft:CGPoint, botRight:CGPoint) -> CIImage {
var rectCoords = NSMutableDictionary(capacity: 4)
rectCoords["inputTopLeft"] = CIVector(CGPoint:topLeft)
rectCoords["inputTopRight"] = CIVector(CGPoint:topRight)
rectCoords["inputBottomLeft"] = CIVector(CGPoint:botLeft)
rectCoords["inputBottomRight"] = CIVector(CGPoint:botRight)
return image.imageByApplyingFilter("CIPerspectiveCorrection", withInputParameters: rectCoords)
}
这里是我调用这个函数的地方:
func testCrop() {
let ciInputImage = CIImage(image:UIImage(named:"test-pattern.jpg")!)
println("source image is \(ciInputImage)") //<CIImage: 0x170212290 extent [0 0 1024 1024]>
let ptBotLeft = CGPointMake(32.0,992.0)
let ptBotRight = CGPointMake(992.0,992.0)
let ptTopRight = CGPointMake(992.0,32.0)
let ptTopLeft = CGPointMake(32.0,32.0)
let croppedImage = _getCroppedImageWithImage(ciInputImage, topLeft: ptTopLeft, topRight: ptTopRight, botLeft: ptBotLeft, botRight: ptBotRight)
println("cropped image \(croppedImage)") //<CIImage: 0x174204a60 extent [0 0 960 960]>
let croppedImageCG = CIContext(options: nil).createCGImage(croppedImage, fromRect: croppedImage.extent())
let imageVC = ImageViewController(image: UIImage(CGImage: croppedImageCG))
presentViewController(imageVC, animated: true, completion: nil)
}
有没有人遇到过这样的问题?
这是源图片
这是在 UIImageView 中显示的最终图像,contentMode 设置为 scaleAspectFit
好的,我很确定我的问题是 CoreImage 使用笛卡尔坐标系。 Y 起来了。 (零,零)在左下角。
我正在使用 CIPerspectiveCorrection Filter,我的问题是我返回的图像结果是镜像的、上下颠倒的,并且用于透视校正的点似乎参考了错误的轴或轴方向。
为了隔离问题,我一直在处理 1024 x 1024 的测试图像,并且我正在传递一个完美的矩形区域。我仍然以垂直和水平翻转的图像结束。
这是我的函数,returns 给定图像和一组点的裁剪 CIImage 实例:
private func _getCroppedImageWithImage(image:CIImage, topLeft:CGPoint, topRight:CGPoint, botLeft:CGPoint, botRight:CGPoint) -> CIImage {
var rectCoords = NSMutableDictionary(capacity: 4)
rectCoords["inputTopLeft"] = CIVector(CGPoint:topLeft)
rectCoords["inputTopRight"] = CIVector(CGPoint:topRight)
rectCoords["inputBottomLeft"] = CIVector(CGPoint:botLeft)
rectCoords["inputBottomRight"] = CIVector(CGPoint:botRight)
return image.imageByApplyingFilter("CIPerspectiveCorrection", withInputParameters: rectCoords)
}
这里是我调用这个函数的地方:
func testCrop() {
let ciInputImage = CIImage(image:UIImage(named:"test-pattern.jpg")!)
println("source image is \(ciInputImage)") //<CIImage: 0x170212290 extent [0 0 1024 1024]>
let ptBotLeft = CGPointMake(32.0,992.0)
let ptBotRight = CGPointMake(992.0,992.0)
let ptTopRight = CGPointMake(992.0,32.0)
let ptTopLeft = CGPointMake(32.0,32.0)
let croppedImage = _getCroppedImageWithImage(ciInputImage, topLeft: ptTopLeft, topRight: ptTopRight, botLeft: ptBotLeft, botRight: ptBotRight)
println("cropped image \(croppedImage)") //<CIImage: 0x174204a60 extent [0 0 960 960]>
let croppedImageCG = CIContext(options: nil).createCGImage(croppedImage, fromRect: croppedImage.extent())
let imageVC = ImageViewController(image: UIImage(CGImage: croppedImageCG))
presentViewController(imageVC, animated: true, completion: nil)
}
有没有人遇到过这样的问题?
这是源图片
这是在 UIImageView 中显示的最终图像,contentMode 设置为 scaleAspectFit
好的,我很确定我的问题是 CoreImage 使用笛卡尔坐标系。 Y 起来了。 (零,零)在左下角。