2014年3月27日 星期四

Visual studio 2013 express 下 安裝 EmguCV - WebCam


     Hello World 是很順利,但是接下來就很不順了,一直無法完全所有的Compile動作,最後我連 OpenCV的 Source 都下載下來,準備要自己重 Build Library,還好在試 OpenCV 與 Visual Studio 2013 c++ 時 ,OpenCV 所附的Sample程式可以在 Visual Studio 2013下完成 exe 檔,所以 我想應該是我 install EmguCV 時可能遺漏一些步驟,所以我想再重新 Install 一次 EmguCV。

這次我下載的版本是 emgucv-2.4.9-alpha

emgucv-gpu-2.4.9.1847
    因為我得電腦是 64 位元的,我有上網查這個版本是可以供給 64 位元的 Window 使用的,Install 的畫面 :


EmguCV 64bit



安裝完後,在 Emgu下有:

emgucv-windows-universal-cuda 2.9.0.1922
emgucv-windows-universal-gpu 2.4.9.1847

    我因為是要作 64 位元的系統,接著在 System 環境變數後附加 D:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\bin\x64,這設定可將游標指在"電腦"上按右鍵,選 "內容" 會看見系統資訊:


    選擇進階系統設定,再到 環境變數:



    編輯系統變數中的 PATH:

    
    在原有PATH 的內容最後先加上 ";" ,再加上 EmguCV bin 下 的 x64:


    在我的電腦上是:
    D:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\bin\x64

    接著用 Visual Studio 2013 建一個新的c# 下 Windows Form 應用程式 專案:


    在我原本 Visual Studio 2013 中的組態管理只有 Any CPU的組態,如下圖:



到方案總管的方案上按右鍵選擇組態管理員:




    進入組態管理員,也是將 Any Cpu 下拉,選擇 "新增":

    或面會出現 :

在新平台中選擇 x64後按確定返回主畫面,主畫面會出現 x64:


接著在主畫面方案總管中的參考,按右鍵選擇 "加入參考":


   在參考管理員中先用 "瀏覽" 到 
    D:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\bin


加入 Emgu.CV.dll、Emgu.CV.ML.dll、Emgu.CV.UI.dll、Emgu.Util.dll、ZedGraph.dll共五个DLL文件,加完後方案總管的參考會如下:
    
接著在方案總管C#應用程式上按右鍵-> 加入-> 現有項目


我是將 D:\Emgu\emgucv-windows-universal-gpu 2.4.9.1847\bin\x64 下所有的 DLL 一次全部加入,接著再到方案總管把剛才加入的 DLL 全部選定:


這時會看到屬性中有一欄位是複製到輸出目錄,請把 不要複製改成永遠複製。

這時可以按下 CTRL-F5,接著檢查一下專案目錄下 \bin\x64\Debug,前面加入的 DLL 文件,應該都自動 複製過來了。

  先測一段小程式,先在 Form 上 加一個 button 和 pictureBox,程式如下: 

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

using Emgu.CV;
using Emgu.Util;
using Emgu.CV.Structure;

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

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog Openfile = new OpenFileDialog();
            if (Openfile.ShowDialog() == DialogResult.OK)
            {
                Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(Openfile.FileName);
                pictureBox1.Image = My_Image.ToBitmap();
            }
        }
    }
}


按 Ctrl-F5,順利的話,應該會要求一個圖型檔,最後顯示在 picturebox 中:



再來進入"選擇工具箱項目" , 先選擇"瀏覽":


找到 Emgu.CV.UI.dll 加入工具箱,這時你就會看到 工具箱上多了 imagebox 、histogramBox、MatrixBox ..., 這時就可以將 form 上的 pictureBox 改為 ImageBox ,成式改為:

         public Form1()
        {
            InitializeComponent();
            cap = new Capture(0);
             Application.Idle += new EventHandler(Application_Idle);
        }

         void Application_Idle(object sender, EventArgs e)
        {
            Image<Bgr, Byte> My_Image = cap.QueryFrame();
            imageBox1.Image = cap.QueryFrame();
        }


再執行就會看到 webcam 傳回的影像。