diff --git a/OpenCV/Form1.cs b/OpenCV/Form1.cs index 1570313..818cf34 100644 --- a/OpenCV/Form1.cs +++ b/OpenCV/Form1.cs @@ -39,7 +39,7 @@ namespace OpenCV OpenCVClass Converter = new OpenCVClass(); pictureBoxIpl1.ImageIpl = src; - pictureBoxIpl2.ImageIpl = Converter.DrawImage(); + pictureBoxIpl2.ImageIpl = Converter.HSVRed(src); } catch (Exception ex) { diff --git a/OpenCV/OpenCVClass.cs b/OpenCV/OpenCVClass.cs index 56bfad1..7d9c3a5 100644 --- a/OpenCV/OpenCVClass.cs +++ b/OpenCV/OpenCVClass.cs @@ -18,6 +18,8 @@ namespace OpenCV IplImage affine; IplImage perspective; IplImage draw; + IplImage hsv; + IplImage hsvRed; public IplImage GrayScale(IplImage src) { @@ -133,11 +135,68 @@ namespace OpenCV Cv.DrawCircle(draw, new CvPoint(200, 200), 50, CvColor.Red, -1); Cv.DrawRect(draw, new CvPoint(300, 150), new CvPoint(500, 300), CvColor.Green, 5); Cv.DrawEllipse(draw, new CvPoint(150, 400), new CvSize(100, 50), 0, 90, 360, CvColor.Green, -1); - Cv.PutText(draw, "Open CV 오?", new CvPoint(400, 400), new CvFont(FontFace.HersheyComplex, 1, 1), CvColor.White); + Cv.PutText(draw, "Open CV", new CvPoint(400, 400), new CvFont(FontFace.HersheyComplex, 1, 1), CvColor.White); return draw; } + public IplImage HSV(IplImage src) + { + hsv = new IplImage(src.Size, BitDepth.U8, 3); + + IplImage h = new IplImage(src.Size, BitDepth.U8, 1); + IplImage s = new IplImage(src.Size, BitDepth.U8, 1); + IplImage v = new IplImage(src.Size, BitDepth.U8, 1); + + Cv.CvtColor(src, hsv, ColorConversion.BgrToHsv); + Cv.Split(hsv, h, s, v, null); + + hsv.SetZero(); + + // Hue + //Cv.InRangeS(h, 20, 30, h); // Yellow + //Cv.Copy(src, hsv, h); + + // Hue - Red + IplImage lowerRed = new IplImage(src.Size, BitDepth.U8, 1); + IplImage upperRed = new IplImage(src.Size, BitDepth.U8, 1); + IplImage red = new IplImage(src.Size, BitDepth.U8, 1); + Cv.InRangeS(h, 0, 10, lowerRed); + Cv.InRangeS(h, 170, 179, upperRed); + Cv.AddWeighted(lowerRed, 1.0, upperRed, 1.0, 0.0, red); + Cv.Copy(src, hsv, red); + + // Saturation + //Cv.InRangeS(s, 20, 30, s); + //Cv.Copy(src, hsv, s); + + // Value + //Cv.InRangeS(v, 20, 30, v); + //Cv.Copy(src, hsv, v); + + return hsv; + } + + public IplImage HSVRed(IplImage src) + { + hsv = new IplImage(src.Size, BitDepth.U8, 3); + + IplImage lowerRed = new IplImage(src.Size, BitDepth.U8, 1); + IplImage upperRed = new IplImage(src.Size, BitDepth.U8, 1); + IplImage red = new IplImage(src.Size, BitDepth.U8, 1); + + Cv.CvtColor(src, hsv, ColorConversion.BgrToHsv); + + Cv.InRangeS(hsv, new CvScalar(0, 100, 100), new CvScalar(10, 255, 255), lowerRed); + Cv.InRangeS(hsv, new CvScalar(170, 100, 100), new CvScalar(179, 255, 255), upperRed); + Cv.AddWeighted(lowerRed, 1.0, upperRed, 1.0, 0.0, red); + + hsv.SetZero(); + Cv.Copy(src, hsv, red); + + return hsv; + } + private void Release(params IplImage[] images) { for (int i = 0; i < images.Length; i++) @@ -162,7 +221,9 @@ namespace OpenCV rotate, affine, perspective, - draw + draw, + hsv, + hsvRed ); } }