Пример #1
0
        public Mat MakeSkeleton(
            [InputPin(Description = "", PropertyMode = PropertyMode.Never)] Mat image
            )
        {
            if (image.Channels() != 1)
            {
                throw new Exception("Input image should be a single channel image.");
            }

            Mat img  = image.Clone();
            Mat skel = Mat.Zeros(img.Size(), MatType.CV_8UC1);
            Mat temp;
            Mat eroded;

            Mat element = OpenCvWrapper.GetStructuringElement(new Size(3, 3), MorphShapes.Cross);

            bool done;

            do
            {
                eroded = img.Erode(element);
                temp   = eroded.Dilate(element);
                temp   = OpenCvWrapper.Subtract(img, temp);
                skel   = OpenCvWrapper.BitwiseOr(skel, temp);
                eroded.CopyTo(img);

                done = (OpenCvWrapper.CountNonZero(img) == 0);
            } while (!done);

            return(skel);
        }
Пример #2
0
        private int GetObjectIndex()
        {
            double brightness = OpenCvWrapper.Brightness(workingBitmap);

            // 이미지 밝기가 충분히 큰 경우, 첫 번째 가짜 객체는 무시한다
            return(brightness > minBrightness ? 1 : 0);
        }
        private void ButtonDrawContours_Click(object sender, RoutedEventArgs e)
        {
            if (inputSoftwareBitmap != null)
            {
                processedImage = inputSoftwareBitmap.ToWriteableBitmap();

                OpenCvWrapper.DetectObjects(processedImage, true);

                OnPropertyChanged("ProcessedImage");
            }
        }
        private void ThresholdImage()
        {
            if (inputSoftwareBitmap != null)
            {
                processedImage = inputSoftwareBitmap.ToWriteableBitmap();

                OpenCvWrapper.Threshold(processedImage, thresholdLevel, thresholdType);

                OnPropertyChanged("ProcessedImage");
            }
        }
Пример #5
0
        private async Task <ObjectDescriptor> FindLargestObject(VideoFrame videoFrame)
        {
            if (Dispatcher.HasThreadAccess)
            {
                videoFrame.SoftwareBitmap.CopyToBuffer(workingBitmap.PixelBuffer);

                var objects = OpenCvWrapper.DetectObjects(workingBitmap, false);

                return(GetLargestObject(objects));
            }
            else
            {
                ObjectDescriptor objectDescriptor = null;

                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() =>
                {
                    objectDescriptor = await FindLargestObject(videoFrame);
                });

                return(objectDescriptor);
            }
        }