CIDetector.RectDetector绑定到查看边界坐标

时间:2015-08-21 12:49:44

标签: ios xamarin avcapturesession

所以,

我正在尝试在检测到的文档周围显示矩形(A4) 我正在使用AVCaptureSession和AVCaptureStillImageOutput输出。

NSError Error = null;
        Session = new AVCaptureSession();
        AVCaptureDevice Device = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);
        AVCaptureDeviceInput DeviceInput = AVCaptureDeviceInput.FromDevice(Device, out Error);
        Session.AddInput(DeviceInput);
        AVCaptureStillImageOutput CaptureOutput = new AVCaptureStillImageOutput();
        CaptureOutput.OutputSettings = new NSDictionary(AVVideo.CodecKey, AVVideo.CodecJPEG) ;

        Session.AddOutput(CaptureOutput);

我有一个定时器,它接收输出并将其传递给我的处理程序

 NSTimer.CreateRepeatingScheduledTimer(TimeSpan.Parse("00:00:02"), delegate
            {

                CaptureImageWithMetadata(CaptureOutput,CaptureOutput.Connections[0]);
            });

我还有一个AVCapturePreviewLayer,它的界限是全屏(iPad Mini Portrait)

 PreviewLayer = new AVCaptureVideoPreviewLayer(Session);
        PreviewLayer.Frame = this.View.Frame;
        PreviewLayer.VideoGravity = AVLayerVideoGravity.ResizeAspectFill;
        this.View.Layer.AddSublayer(PreviewLayer);
        PreviewLayer.ZPosition = (PreviewLayer.ZPosition - 1);

以下是处理程序

private async void CaptureImageWithMetadata(AVCaptureStillImageOutput output, AVCaptureConnection connection)
    {
        var sampleBuffer = await output.CaptureStillImageTaskAsync(connection);
        var imageData = AVCaptureStillImageOutput.JpegStillToNSData(sampleBuffer);

        var image = CIImage.FromData(imageData);
        var metadata = image.Properties.Dictionary.MutableCopy() as NSMutableDictionary;

        CIContext CT = CIContext.FromOptions(null);
        CIDetectorOptions OP = new CIDetectorOptions();
        OP.Accuracy = FaceDetectorAccuracy.High;
        OP.AspectRatio = 1.41f;
        CIDetector CI = CIDetector.CreateRectangleDetector(CT, OP);
        CIFeature[] HH = CI.FeaturesInImage(image,CIImageOrientation.BottomRight);

        CGAffineTransform Transfer = CGAffineTransform.MakeScale(1, -1);
        Transfer = CGAffineTransform.Translate(Transfer, 0, -this.View.Bounds.Size.Height);

        if (HH.Length > 0)
        {
            CGRect RECT = CGAffineTransform.CGRectApplyAffineTransform(HH[0].Bounds, Transfer);


            Console.WriteLine("start");
            Console.WriteLine("IMAGE : "+HH[0].Bounds.ToString());
            Console.WriteLine("SCREEN :"+RECT.ToString());
            Console.WriteLine("end");

            BB.Frame = RECT;
            BB.Hidden = false;


        }



    }

尽管如此在遵循指示我需要转换坐标的指导之后 - 我的荧光笔(绿色)不包围文档,我无法弄清楚原因。

我正在使用CIImageOrientation.BottomRight作为测试,但无论我放在这里...总是相同的结果。见图像

enter image description here

enter image description here

0 个答案:

没有答案