IEnumerator DetectorFrames() { if (_frameToMatHelper.IsPlaying() && _frameToMatHelper.DidUpdateThisFrame()) { while (true) { yield return(_waitForSeconds); Mat rgbaMat = _frameToMatHelper.GetMat(); Cv2.CvtColor(rgbaMat, _grayMat, ColorConversionCodes.RGBA2GRAY); bool patternFound = false; for (int i = 0; i < _patternsArray.Length; i++) { patternFound = _patternDetector.FindPattern(_grayMat, _patternsArray[i]); if (patternFound) { _targetPatternTex2d = Utils.MatToTexture2D(_patternsArray[i].frame); PatternRawImage.texture = _targetPatternTex2d; PatternRawImage.rectTransform.localScale = new Vector3(1.0f, (float)_patternsArray[i].frame.Height / (float)_patternsArray[i].frame.Width, 1.0f); } yield return(0); } _previewTex2d = Utils.MatToTexture2D(rgbaMat); _frameRenderer.material.mainTexture = _previewTex2d; } } }
// Update is called once per frame void Update() { if (_frameToMatHelper.IsPlaying() && _frameToMatHelper.DidUpdateThisFrame()) { OpenCvSharp.Mat rgbaMat = _frameToMatHelper.GetMat(); OpenCvSharp.Cv2.CvtColor(rgbaMat, _rgbMat, OpenCvSharp.ColorConversionCodes.RGBA2RGB); _keypoints = _detector.Detect(rgbaMat); OpenCvSharp.Cv2.DrawKeypoints(_rgbMat, _keypoints, rgbaMat, OpenCvSharp.Scalar.All(-1), OpenCvSharp.DrawMatchesFlags.NotDrawSinglePoints); OpenCvSharp.Cv2.Rectangle(rgbaMat, _patternRect.TopLeft, _patternRect.BottomRight, new OpenCvSharp.Scalar(255, 0, 0, 255), 5); _previewTex2d = Utils.MatToTexture2D(rgbaMat); _frameRendere.material.mainTexture = _previewTex2d; } }