Beispiel #1
0
        public Watershed()
        {
            // cvWatershed
            // マウスで円形のマーカー(シード領域)の中心を指定し,複数のマーカーを設定する.
            // このマーカを画像のgradientに沿って広げて行き,gradientの高い部分に出来る境界を元に領域を分割する.
            // 領域は,最初に指定したマーカーの数に分割される. 

            // (2)画像の読み込み,マーカー画像の初期化,結果表示用画像領域の確保を行なう
            using (IplImage srcImg = new IplImage(Const.ImageGoryokaku, LoadMode.AnyDepth | LoadMode.AnyColor))
            using (IplImage dstImg = srcImg.Clone())
            using (IplImage dspImg = srcImg.Clone())
            using (IplImage markers = new IplImage(srcImg.Size, BitDepth.S32, 1))
            {
                markers.Zero();

                // (3)入力画像を表示しシードコンポーネント指定のためのマウスイベントを登録する
                using (CvWindow wImage = new CvWindow("image", WindowMode.AutoSize))
                {
                    wImage.Image = srcImg;
                    // クリックにより中心を指定し,円形のシード領域を設定する   
                    int seedNum = 0;
                    wImage.OnMouseCallback += delegate(MouseEvent ev, int x, int y, MouseEvent flags)
                    {
                        if (ev == MouseEvent.LButtonDown)
                        {
                            seedNum++;
                            CvPoint pt = new CvPoint(x, y);
                            markers.Circle(pt, 20, CvScalar.ScalarAll(seedNum), Cv.FILLED, LineType.Link8, 0);
                            dspImg.Circle(pt, 20, CvColor.White, 3, LineType.Link8, 0);
                            wImage.Image = dspImg;
                        }
                    };
                    CvWindow.WaitKey();
                }

                // (4)watershed分割を実行する  
                Cv.Watershed(srcImg, markers);

                // (5)実行結果の画像中のwatershed境界(ピクセル値=-1)を結果表示用画像上に表示する
                for (int i = 0; i < markers.Height; i++)
                {
                    for (int j = 0; j < markers.Width; j++)
                    {
                        int idx = (int)(markers.Get2D(i, j).Val0);
                        if (idx == -1)
                        {
                            dstImg.Set2D(i, j, CvColor.Red);
                        }
                    }
                }
                using (CvWindow wDst = new CvWindow("watershed transform", WindowMode.AutoSize))
                {
                    wDst.Image = dstImg;
                    CvWindow.WaitKey();
                }
            }

        }
Beispiel #2
0
        public Watershed()
        {
            using (var srcImg = new IplImage(FilePath.Image.Goryokaku, LoadMode.AnyDepth | LoadMode.AnyColor))
            using (var dstImg = srcImg.Clone())
            using (var dspImg = srcImg.Clone())
            using (var markers = new IplImage(srcImg.Size, BitDepth.S32, 1))
            {
                markers.Zero();

                using (var window = new CvWindow("image", WindowMode.AutoSize))
                {
                    window.Image = srcImg;
                    // Mouse event  
                    int seedNum = 0;
                    window.OnMouseCallback += delegate(MouseEvent ev, int x, int y, MouseEvent flags)
                    {
                        if (ev == MouseEvent.LButtonDown)
                        {
                            seedNum++;
                            CvPoint pt = new CvPoint(x, y);
                            markers.Circle(pt, 20, CvScalar.ScalarAll(seedNum), Cv.FILLED, LineType.Link8, 0);
                            dspImg.Circle(pt, 20, CvColor.White, 3, LineType.Link8, 0);
                            window.Image = dspImg;
                        }
                    };
                    CvWindow.WaitKey();
                }

                Cv.Watershed(srcImg, markers);

                // draws watershed
                for (int i = 0; i < markers.Height; i++)
                {
                    for (int j = 0; j < markers.Width; j++)
                    {
                        int idx = (int)(markers.Get2D(i, j).Val0);
                        if (idx == -1)
                        {
                            dstImg.Set2D(i, j, CvColor.Red);
                        }
                    }
                }
                using (CvWindow wDst = new CvWindow("watershed transform", WindowMode.AutoSize))
                {
                    wDst.Image = dstImg;
                    CvWindow.WaitKey();
                }
            }

        }
Beispiel #3
0
        private bool StartFishing()
        {
            iNumTries++;

            if (!bRumsy)
            {
                SendKeys.SendWait("0");

                rumsyTimer.AutoReset = true;
                rumsyTimer.Interval = 3 * 60 * 1000; // 3 minutes rumsy label
                rumsyTimer.Elapsed += new ElapsedEventHandler(OnRumsyEndTimerEvent);
                rumsyTimer.Enabled = true;

                bRumsy = true;
            }

            if (!bLurk)
            {
                SendKeys.SendWait(this.txtLurk.Text);

                lurkTimer.AutoReset = true;
                lurkTimer.Interval = 10*60*1000; // 10 minutes best lurk
                lurkTimer.Elapsed += new ElapsedEventHandler(OnLurkEndTimerEvent);
                lurkTimer.Enabled = true;

                bLurk = true;

                Thread.Sleep(2500);
            }

            Thread.Sleep(1000);

            Bitmap b4Fishing = ScreenShot.CaptureImage(new Point(this.Left, this.Top), new Point(0,0), new Rectangle(this.Top, this.Left, this.Width, this.Height));

            SendKeys.SendWait(this.txtKey.Text);

            Thread.Sleep(400);

            aTimer.AutoReset = true;
            aTimer.Interval = 20000;
            aTimer.Elapsed += new ElapsedEventHandler(OnFishingTimerFinishEvent);
            aTimer.Enabled = true;

            Thread.Sleep(2000);

            Bitmap onFishing = ScreenShot.CaptureImage(new Point(this.Left, this.Top), new Point(0, 0), new Rectangle(this.Top, this.Left, this.Width, this.Height));

            IplImage i1 = FeatureDetector(b4Fishing);
            IplImage i2 = FeatureDetector(onFishing);

            IplImage diff = new IplImage(new OpenCvSharp.CvSize(i1.Size.Width, i1.Size.Height), BitDepth.U8, 1);

            IplImage normalized = new IplImage(new OpenCvSharp.CvSize(diff.Size.Width, diff.Size.Height), BitDepth.U8, 1);

            OpenCvSharp.Cv.AbsDiff((CvArr)i2, (CvArr)i1, (CvArr)diff);
            //OpenCvSharp.Cv.CvtColor(diff, gray, ColorConversion.RgbToGray);
            OpenCvSharp.Cv.Normalize(diff, normalized, 0.0, 255.0, NormType.MinMax);

            bool bEnd = false;
            bool bFound = false;
            on_cursor = true;

            for (int i = 0; i < normalized.Height; ++i)
            {
                if (!on_cursor)
                    break;

                for (int j = 0; j < normalized.Width; ++j)
                {
                    if (!on_cursor)
                        break;

                    CvScalar color = normalized.Get2D(i, j);

                    if (color.Val0 > 50)
                    {
                        Cursor.Position = new Point(this.Left + j, this.Top + i);
                        //Thread.Sleep(100);

                        if (TestCursor())
                        {

                            bEnd = true;
                            bFound = true;
                            break;
                        }
                    }
                }
                if (bEnd)
                    break;
            }

            on_cursor = false;

            Bitmap bDiff = BitmapConverter.ToBitmap(i2);

            //b4Fishing.Save("C:\\cursors\\b4fish.jpg", ImageFormat.Jpeg);
            //onFishing.Save("C:\\cursors\\onfish.jpg", ImageFormat.Jpeg);
            //bDiff.Save("C:\\cursors\\diff.jpg", ImageFormat.Jpeg);

            return bFound;
        }
 private bool CheckFlagHelper2(IplImage img, int x, int y)
 {
   CvScalar tmp = img.Get2D(x, y);
   return 240 < tmp.Val0 &&
          240 < tmp.Val1 &&
          240 < tmp.Val2;
 }
    private bool Check7(IplImage img)
    {
      int x = 9;
      for (int y = 1; y < 10; y++)
      {
        if (Check7Helper(img.Get2D(x, y)))
        {
          int len = 0;
          int xbuf = x;
          // xの左端を探す
          try
          {
            while (!Check7Helper(img.Get2D(--x, y))) { len++; }
            len++;
            x = xbuf;
            while (!Check7Helper(img.Get2D(++x, y))) { len++; }
            len++;

            return len == 7;
          }
          catch (Exception e)
          {
            return false;
          }
        }
      }
      return false;
    }
 private bool Check6(IplImage img)
 {
   CvScalar tmp0 = img.Get2D(11, 6);
   CvScalar tmp1 = img.Get2D(11, 7);
   return (90 < tmp0.Val0 && tmp0.Val0 < 144 &&
           90 < tmp0.Val1 && tmp0.Val1 < 144 &&
           tmp0.Val2 < 10) ||
          (90 < tmp1.Val0 && tmp1.Val0 < 144 &&
           90 < tmp1.Val1 && tmp1.Val1 < 144 &&
           tmp1.Val2 < 10);
 }
 private bool Check5(IplImage img)
 {
   for (int y = 4; y < 8; y++)
   {
     for (int x = 3; x < 9; x++)
     {
       CvScalar tmp0 = img.Get2D(x, y);
       if (tmp0.Val0 < 10 &&
           tmp0.Val1 < 10 &&
           120 < tmp0.Val2 && tmp0.Val2 < 130)
       {
         return true;
       }
     }
   }
   return false;
 }
 private bool Check4(IplImage img)
 {
   CvScalar tmp0 = img.Get2D(10, 10);
   CvScalar tmp1 = img.Get2D(11, 11);
   return (tmp0.Val0 > 100 && tmp0.Val1 < 10 && tmp0.Val2 < 10)
        || (tmp1.Val0 > 100 && tmp1.Val1 < 10 && tmp1.Val2 < 10);
 }
 private bool Check3(IplImage img)
 {
   CvScalar tmp = img.Get2D(8, 8);
   CvScalar tmp2 = img.Get2D(9, 9);
   return (tmp.Val0 < 20 &&
           tmp.Val1 < 20 &&
           tmp.Val2 > 150) ||
          (tmp2.Val0 < 20 &&
           tmp2.Val1 < 20 &&
           tmp2.Val2 > 150);
 }
 private bool Check2(IplImage img)
 {
   CvScalar tmp = img.Get2D(7, 12);
   return (tmp.Val0 < 50 && tmp.Val1 > 50 && tmp.Val2 < 60);
 }
 private bool Check1(IplImage img)
 {
   return img.Get2D(8, 9) == new CvScalar(190, 80, 64, 255);
 }