Example #1
0
        public static void EqualizeHistHsv()
        {
            Glb.DrawMatAndHist0(Glb.matSrc);
            Glb.DrawMat0(Glb.matSrc);

            // BGR to HSV변환
            var matHsv = Glb.matSrc.CvtColor(ColorConversionCodes.BGR2HSV);

            Glb.DrawHist0(matHsv, true);

            // 채널 분리
            var hsvChannels = matHsv.Split();

            // 변환
            hsvChannels[2] = hsvChannels[2].EqualizeHist();
            // 채널 병합
            var matDst = new Mat();

            Cv2.Merge(hsvChannels, matDst);
            Glb.DrawHist1(matDst, true);

            // HSV to BGR변환
            matDst = matDst.CvtColor(ColorConversionCodes.HSV2BGR);

            Glb.DrawMat1(matDst);

            Glb.DrawMatAndHist2(null);

            matHsv.Dispose();
            matDst.Dispose();
        }
Example #2
0
        //public static void GenerateHoleTest(
        //        int bufWidth = 1000, int bufHeight = 1000, byte bufColor = 35,
        //        int circleX = 500, int circleY = 500, int circleRadius = 30, byte circleColor = 255,
        //        double blurKsize = 61, double blurSigma = 0,
        //        int resizeX = 100, int resizeY = 100) {
        //    var matImage = new Mat(bufHeight, bufWidth, MatType.CV_8UC1);
        //    matImage.FloodFill(new Point(0, 0), bufColor);
        //    matImage.Circle(circleX, circleY, circleRadius, circleColor);
        //    matImage.FloodFill(new Point(circleX, circleY), circleColor);
        //    Glb.DrawMatAndHist0(matImage);

        //    var matBlur = matImage.GaussianBlur(new Size(blurKsize, blurKsize), blurSigma, blurSigma, BorderTypes.Replicate);
        //    Glb.DrawMatAndHist1(matBlur);

        //    var matResize = matBlur.Resize(new Size(resizeX, resizeY));
        //    Glb.DrawMatAndHist2(matResize);

        //    matResize.Dispose();
        //    matBlur.Dispose();
        //    matImage.Dispose();
        //}

        //public static void GenerateHoleLocationSaveTest(
        //        int bufWidth = 1000, int bufHeight = 1000, byte bufColor = 35,
        //        int circleX = 500, int circleY = 500, int circleRadius = 30, byte circleColor = 255,
        //        double blurKsize = 61, double blurSigma = 0,
        //        int resizeX = 100, int resizeY = 100) {
        //    for (int y = circleY; y < circleY + 10; y++) {
        //        for (int x = circleX; x < circleX + 10; x++) {
        //            var matImage = new Mat(bufHeight, bufWidth, MatType.CV_8UC1);
        //            matImage.FloodFill(new Point(0, 0), bufColor);
        //            matImage.Circle(x, y, circleRadius, circleColor);
        //            matImage.FloodFill(new Point(x, y), circleColor);
        //            Glb.DrawMatAndHist0(matImage);

        //            var matBlur = matImage.GaussianBlur(new Size(blurKsize, blurKsize), blurSigma, blurSigma, BorderTypes.Replicate);
        //            Glb.DrawMatAndHist1(matBlur);

        //            var matResize = matBlur.Resize(new Size(resizeX, resizeY));
        //            Glb.DrawMatAndHist2(matResize);
        //            string imageFilePath = $@"C:\test\ContactHole_Location\HolePos_({x},{y}).bmp";
        //            bool r = matResize.SaveImage(imageFilePath);
        //            Console.WriteLine($"Save Image File : {imageFilePath} => {r}");
        //            matResize.Dispose();
        //            matBlur.Dispose();
        //            matImage.Dispose();
        //        }
        //    }
        //}

        //public static void GenerateHoleSizeSaveTest(
        //        int bufWidth = 1000, int bufHeight = 1000, byte bufColor = 35,
        //        int circleX = 500, int circleY = 500, int circleRadius = 30, byte circleColor = 255,
        //        double blurKsize = 61, double blurSigma = 0,
        //        int resize = 100) {
        //    for (int i = - 20; i <= 20; i += 4) {
        //        var matImage = new Mat(bufHeight, bufWidth, MatType.CV_8UC1);
        //        matImage.FloodFill(new Point(0, 0), bufColor);
        //        matImage.Circle(circleX, circleY, circleRadius, circleColor);
        //        matImage.FloodFill(new Point(circleX, circleY), circleColor);
        //        Glb.DrawMatAndHist0(matImage);

        //        var matBlur = matImage.GaussianBlur(new Size(blurKsize, blurKsize), blurSigma, blurSigma, BorderTypes.Replicate);
        //        Glb.DrawMatAndHist1(matBlur);

        //        int roiSize = 60;
        //        int resize2 = resize + i;
        //        var matResizeHole = matBlur.Resize(new Size(resize2, resize2));
        //        var matResizeHoleRoi = new Mat(matResizeHole, new Rect((resize2-roiSize)/2, (resize2-roiSize)/2, roiSize, roiSize));

        //        var matResizeOri = matImage.Resize(new Size(resize, resize));
        //        var matResizeOriRoi = new Mat(matResizeOri, new Rect((resize-roiSize)/2, (resize-roiSize)/2, roiSize, roiSize));

        //        matResizeHoleRoi.CopyTo(matResizeOriRoi);
        //        string imageFilePath = $@"C:\test\ContactHole_Size\HoleSize_({resize2:000}).bmp";
        //        bool r = matResizeOri.SaveImage(imageFilePath);
        //        Console.WriteLine($"Save Image File : {imageFilePath} => {r}");

        //        matResizeHole.Dispose();
        //        matBlur.Dispose();
        //        matImage.Dispose();
        //    }
        //}

        public static void HSVControl(double hscale = 1.0, double hoffset = 0.0, double sscale = 1.0, double soffset = 0.0, double vscale = 1.0, double voffset = 0.0)
        {
            Glb.DrawMat0(Glb.matSrc);

            // BGR to HSV변환
            var matHsv = Glb.matSrc.CvtColor(ColorConversionCodes.BGR2HSV);

            Glb.DrawHist0(matHsv, true);

            // 채널 분리
            var hsvChannels = matHsv.Split();

            // 변환
            hsvChannels[0].ConvertTo(hsvChannels[0], MatType.CV_8UC1, hscale, hoffset);
            hsvChannels[1].ConvertTo(hsvChannels[1], MatType.CV_8UC1, sscale, soffset);
            hsvChannels[2].ConvertTo(hsvChannels[2], MatType.CV_8UC1, vscale, voffset);

            // 채널 병합
            var matDst = new Mat();

            Cv2.Merge(hsvChannels, matDst);
            Glb.DrawHist1(matDst, true);

            // HSV to BGR변환
            matDst = matDst.CvtColor(ColorConversionCodes.HSV2BGR);
            Glb.DrawMat1(matDst);

            Glb.DrawMatAndHist2(null);

            matHsv.Dispose();
            matDst.Dispose();
        }
Example #3
0
        public static void CarbonPaper(int x1 = 100, int y1 = 300, int x2 = 1100, int y2 = 1600, ThresholdTypes thrType = ThresholdTypes.Binary, int thr = 128, int filterArea = 30)
        {
            // 1. convert to grayscale
            var matGray = Glb.matSrc.CvtColor(ColorConversionCodes.BGR2GRAY);

            // 2. roi crop
            Rect roi            = new Rect(x1, y1, x2 - x1 + 1, y2 - y1 + 1);
            var  matGrayDrawRoi = Glb.matSrc.Clone();

            matGrayDrawRoi.Rectangle(roi, Scalar.Yellow);
            Glb.DrawMat0(matGrayDrawRoi);

            var matRoi = new Mat(matGray, roi);

            Glb.DrawHist0(matRoi);

            // 3. threshold
            var matThr = matRoi.Threshold(thr, 255, thrType);

            Glb.DrawMatAndHist1(matThr);

            // 4. blob with area filter
            CvBlobs blobs = new CvBlobs();

            blobs.Label(matThr);
            blobs.FilterByArea(filterArea, int.MaxValue);

            // 5. display blob
            var matDsp = new Mat(matRoi.Rows, matRoi.Cols, MatType.CV_8UC3);

            matDsp.SetTo(Scalar.Black);
            blobs.RenderBlobs(matDsp, matDsp, RenderBlobsModes.Color);
            Glb.DrawMatAndHist2(matDsp);

            Console.WriteLine("blobs.cnt = {0}", blobs.Count);

            matGray.Dispose();
            matGrayDrawRoi.Dispose();
            matRoi.Dispose();
            matThr.Dispose();
            matDsp.Dispose();
        }