CIPerspectiveCorrection过滤器返回图像翻转和反转

nwa*_*les 7 core-image ios cifilter swift

我正在使用CIPerspectiveCorrection Filter,我的问题是我返回的图像结果是镜像的,颠倒的,用于透视校正的点似乎是引用了错误的轴或轴方向.

为了隔离这个问题,我一直在使用1024 x 1024的测试图像,并且我正在通过一个完美的矩形区域.我仍然在垂直和水平翻转图像.

这是我的函数,它给出一个图像和一组点返回一个裁剪的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)
}
Run Code Online (Sandbox Code Playgroud)

这是我调用此函数的地方:

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)
}
Run Code Online (Sandbox Code Playgroud)

以前有人遇到过这样的问题吗?

这是源图像

在此输入图像描述

这是在UIImageView中显示的最终图像,其中contentMode设置为scaleAspectFit

在此输入图像描述

nwa*_*les 12

好吧,我的问题,我很确定,是CoreImage使用笛卡尔坐标系.Y到了.(零,零)位于左下角.

  • func cartesianForPoint(点:CGPoint,范围:CGRect) - > CGPoint {返回CGPoint(x:point.x,y:extent.height - point.y)} (6认同)