当前位置:   article > 正文

html中rectangle坐标,从CIRectangleFeature坐标转换到查看坐标

cirectanglefeature rect

如果你的路径仅关中Y尺寸:

我认为他们没有完全将CIDetector移植到UIKit。该特征的坐标位于Cocoa坐标系中。只要做container.height - point.y将会转换它。

我也给你的结构正确的名称。其余的东西在那里,我曾经弄清楚发生了什么。可能对你有用。

代码:

func analyzeImage(image: UIImage) -> [Quadrilateral]

{

guard let ciImage = CIImage(image: image)

else { return [] }

let flip = true // set to false to prevent flipping the coordinates

let context = CIContext(options: nil)

let detector = CIDetector(ofType: CIDetectorTypeRectangle, context: context, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh])

let features = detector.featuresInImage(ciImage)

UIGraphicsBeginImageContext(ciImage.extent.size)

let currentContext = UIGraphicsGetCurrentContext()

var frames: [Quadrilateral] = []

for feature in features as! [CIRectangleFeature]

{

var topLeft = CGContextConvertPointToUserSpace(currentContext, feature.topLeft)

var topRight = CGContextConvertPointToUserSpace(currentContext, feature.topRight)

var bottomRight = CGContextConvertPointToUserSpace(currentContext, feature.bottomRight)

var bottomLeft = CGContextConvertPointToUserSpace(currentContext, feature.bottomLeft)

if flip {

topLeft = CGPoint(x: topLeft.x, y: image.size.height - topLeft.y)

topRight = CGPoint(x: topRight.x, y: image.size.height - topRight.y)

bottomLeft = CGPoint(x: bottomLeft.x, y: image.size.height - bottomLeft.y)

bottomRight = CGPoint(x: bottomRight.x, y: image.size.height - bottomRight.y)

}

let frame = Quadrilateral(topLeft: topLeft, topRight: topRight, bottomLeft: bottomLeft, bottomRight: bottomRight)

frames.append(frame)

}

UIGraphicsEndImageContext()

return frames

}

四边形结构:

struct Quadrilateral {

var topLeft : CGPoint = CGPointZero

var topRight : CGPoint = CGPointZero

var bottomLeft : CGPoint = CGPointZero

var bottomRight : CGPoint = CGPointZero

var path : UIBezierPath {

get {

let tempPath = UIBezierPath()

tempPath.moveToPoint(topLeft)

tempPath.addLineToPoint(topRight)

tempPath.addLineToPoint(bottomRight)

tempPath.addLineToPoint(bottomLeft)

tempPath.addLineToPoint(topLeft)

return tempPath

}

}

init(topLeft topLeft_I: CGPoint, topRight topRight_I: CGPoint, bottomLeft bottomLeft_I: CGPoint, bottomRight bottomRight_I: CGPoint) {

topLeft = topLeft_I

topRight = topRight_I

bottomLeft = bottomLeft_I

bottomRight = bottomRight_I

}

var frame : CGRect {

get {

let highestPoint = max(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y)

let lowestPoint = min(topLeft.y, topRight.y, bottomLeft.y, bottomRight.y)

let farthestPoint = max(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x)

let closestPoint = min(topLeft.x, topRight.x, bottomLeft.x, bottomRight.x)

// you might want to set origin to (0,0)

let origin = CGPoint(x: closestPoint, y: lowestPoint)

let size = CGSize(width: farthestPoint, height: highestPoint)

return CGRect(origin: origin, size: size)

}

}

var size : CGSize {

get {

return frame.size

}

}

var origin : CGPoint {

get {

return frame.origin

}

}

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/229345
推荐阅读
相关标签
  

闽ICP备14008679号