【发布时间】:2017-12-01 04:32:00
【问题描述】:
我遇到了一些问题。如何定义二值化图像上的光点。我现在正在使用 ios11 和 Vision。
我使用二值化过滤器CIColorControls(也尝试将其与CIColorInvert结合使用)。
对于光检测,我使用VNImageRequestHandler 和VNDetectRectanglesRequest。
在VNDetectRectanglesRequest 我检查VNDetectedObjectObservation
但无法实现 100% 的帧检测(有时应用无法识别帧上的光点)。我做错了什么?感谢任何帮助
这是我的代码
lazy var rectanglesRequest: VNDetectRectanglesRequest = {
return VNDetectRectanglesRequest(completionHandler: self.handleRectangles)
}()
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
connection.videoOrientation = AVCaptureVideoOrientation.portrait
guard let uiImage = imageFromSampleBuffer(sampleBuffer: sampleBuffer) else { return }
let correctedImage = uiImage
.applyingFilter("CIColorControls", withInputParameters: [
kCIInputSaturationKey: 0,
kCIInputContrastKey: 4.5,
kCIInputBrightnessKey: -1.54
])
//.applyingFilter("CIColorInvert", withInputParameters: nil)
self.searchLightSpot(ciImage: correctedImage)
DispatchQueue.main.async { [unowned self] in //unowned
self.frameImageView.image = UIImage(ciImage: correctedImage)
}
}
func searchLightSpot(ciImage: CIImage) {
var requestOptions: [VNImageOption: Any] = [:]
let handler = VNImageRequestHandler(ciImage: ciImage, options: requestOptions)
DispatchQueue.global(qos: .userInteractive).async {
do {
try handler.perform([self.rectanglesRequest])
} catch {
print(error)
}
}
}
func handleRectangles(request: VNRequest, error: Error?) {
guard let observations = request.results as? [VNDetectedObjectObservation]
else {
print("unexpected result type from VNDetectedObjectObservation")
return
}
guard let detectedObject = observations.first else {
print("not detected object")
return
}
print("detected object: ", detectedObject)
}
【问题讨论】:
标签: image-processing computer-vision core-image ios11 coreml