none
OpenCV in C# Designer.cs 與範例不同的問題 RRS feed

  • 問題

  • 我參考了 小歐ou前輩的方法
    http://www.dotblogs.com.tw/chou/archive/2009/06/13/8812.aspx
    這個網站裡的 5.2

    建立了我第一個OpenCV的程式

    但是在執行的時候卻出現這樣的錯誤

    'myOpenCv.Form1'不包含'Form1_Load'的定義,也找不到擴充方法'Form1_Load'來接受型別
    'myOpenCv.Form1'的第一個引數(您是否遺漏using指示詞或組件參考?)

    發現是Form1.Designer.cs裡面的問題

    我對照了範例的Designer.cs檔案
    發現有幾個不同的地方

    我把出問題的
    this.Load += new System.EventHandler(this.Form1_Load);
    這行註解起來

    並複製範例檔中(Form2.Designer.cs)的
    this.captureButton.Click += new System.EventHandler(this.captureButton_Click);
    這行到我的Form1.Designer.cs中
    就可以執行了

    我想問的是我哪裡沒用好嗎
    不然為什麼我按照範例檔下去做會發生這種錯誤呢?

    還請各位幫忙解答

    謝謝

    以下是我的程式碼

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    //要引用的類別
    using Emgu.CV;
    using Emgu.CV.Structure;
    using Emgu.Util;
    using System.Threading;
    
    namespace myOpenCv
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
        }
    
        private Capture _capture;
        private bool _captureInProgress;
    
        private void ProcessFrame(object sender, EventArgs arg)
        {
          Image<Bgr, Byte> frame = _capture.QueryFrame();
          captureImageBox.Image = frame;
        }
    
        private void captureButton_Click(object sender, EventArgs e)
        {
          #region if capture is not created, create it now
          if (_capture == null)
          {
            try
            {
              _capture = new Capture();
            }
            catch (NullReferenceException excpt)
            {
              MessageBox.Show(excpt.Message);
            }
          }
          #endregion
    
          if (_capture != null)
          {
            if (_captureInProgress)
            { //stop the capture
              Application.Idle -= new EventHandler(ProcessFrame);
              captureButton.Text = "Start Capture";
            }
            else
            {
              //start the capture
              captureButton.Text = "Stop";
              Application.Idle += new EventHandler(ProcessFrame);
            }
    
            _captureInProgress = !_captureInProgress;
          }
        }
    
      }
    }

    或者也可以直接下載我的程式
    http://galantvr4.myweb.hinet.net/myOpenCv.rar
    謝謝

    2010年5月15日 下午 05:09

解答

  • Hi!

    1 我猜測您一開始建立專案時,可能在 Form 上用滑鼠點兩下,想要切換到程式碼模式,假如您有這樣做的話,會建立 Form_Load 事件。但是我的程式碼中並沒有 Form_Load 事件,您直接複製貼上我的程式碼,會導致 Form Designer 有將 Form_Load 事件加入,但是程式碼並沒有對應的 Form_Load 程式碼

    2. 另外關於按鈕事件 captureButton,我猜測您是在表單將按鈕 captureButton 加入後,並沒有從表單點兩下建立對應的 captureButton_Click 事件設定,因此您的程式碼中有 captureButton_Click 程式碼,但是您並沒有在 Form Designer 建立按鈕與 captureButton_Click 事件對應,因此您按了按鈕可能沒有作用

     


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 Lolota Lee 2010年5月21日 上午 05:43
    2010年5月16日 上午 02:22
    版主

所有回覆

  • Hi!

    1 我猜測您一開始建立專案時,可能在 Form 上用滑鼠點兩下,想要切換到程式碼模式,假如您有這樣做的話,會建立 Form_Load 事件。但是我的程式碼中並沒有 Form_Load 事件,您直接複製貼上我的程式碼,會導致 Form Designer 有將 Form_Load 事件加入,但是程式碼並沒有對應的 Form_Load 程式碼

    2. 另外關於按鈕事件 captureButton,我猜測您是在表單將按鈕 captureButton 加入後,並沒有從表單點兩下建立對應的 captureButton_Click 事件設定,因此您的程式碼中有 captureButton_Click 程式碼,但是您並沒有在 Form Designer 建立按鈕與 captureButton_Click 事件對應,因此您按了按鈕可能沒有作用

     


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 Lolota Lee 2010年5月21日 上午 05:43
    2010年5月16日 上午 02:22
    版主
  • 你好~我也是照歐ou前輩的方法

    但是結果會出現    找不到型別或命名空間名稱 'Capture' (您是否遺漏 using 指示詞或組件參考?) 

    想請問該怎麼解決這個錯誤~請大家幫忙一下~感謝!!

    這是我的程式碼

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;


    namespace myOpenCv
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private Capture _capture;
            private bool _captureInProgress;

            private void ProcessFrame(object sender, EventArgs arg)
            {
                Image<Bgr, Byte> frame = _capture.QueryFrame();
                captureImageBox.Image = frame;
            }

            private void captureButton_Click(object sender, EventArgs e)
            {
                #region if capture is not created, create it now
                if (_capture == null)
                {
                    try
                    {
                        _capture = new Capture();
                    }
                    catch (NullReferenceException excpt)
                    {
                        MessageBox.Show(excpt.Message);
                    }
                }
                #endregion

                if (_capture != null)
                {
                    if (_captureInProgress)
                    {  //stop the capture
                        Application.Idle -= new EventHandler(ProcessFrame);
                        captureButton.Text = "Start Capture";
                    }
                    else
                    {
                        //start the capture
                        captureButton.Text = "Stop";
                        Application.Idle += new EventHandler(ProcessFrame);
                    }

                    _captureInProgress = !_captureInProgress;
                }
            }

        }
    }

    2010年7月28日 上午 08:11
  • http://www.dotblogs.com.tw/chou/archive/2009/06/13/8812.aspx

    NET菜鳥自救會

    這裡下載的範例來嘗試看看

    但會出現這個問題 如圖

    http://photo.pchome.com.tw/_manage/my_pic.html?b=1&p=128030610831

    2010年7月28日 上午 08:35
  • 我按照之前的範例做第一個顯示影像的
    出現一個錯誤  30行的 Image<Bgr, Byte> frame = _capture.QueryFrame();

    Bgr出現錯誤錯誤      "找不到型別或命名空間名稱 'Bgr' (您是否遺漏 using 指示詞或組件參考?) " 

    ----------------------------------------------------------------------------------------------------------------------------------

    然後又多拉兩個 ImageBox    在程式碼新增四行
     Image<Gray, Byte> grayFrame = frame.Convert<Gray, Byte>();
               Image<Gray, Byte> cannyFrame = grayFrame.Canny(new Gray(100), new Gray(60));
                 grayscaleImageBox.Image = grayFrame;
                 cannyImageBox.Image = cannyFrame;
             }
    錯誤清單也顯示出錯誤    "找不到型別或命名空間名稱 'Gray' (您是否遺漏 using 指示詞或組件參考?) "

    請問這二個問題是...?
    2012年5月8日 上午 06:28