天天看點

C#快速調用海康威視工業相機的SDK拍照擷取圖檔

本文章開頭會先講一下如何找到SDK包和demo,功能的實作我會直接用平時常用的DLL以及根據海康威視給的demo封裝好的常用功能類,這些都會分享到文末的連結中。

注:halcon雖然有讀取相機拍照的功能,但是我認為海康應該會更懂自己家的産品,SDK做的功能會更穩定且友善使用,所有使用相機的過程中盡量多用相機廠家自帶的SDK開發包。

01

第一步先在海康機器人官網下載下傳MVS軟體,安裝完成後進入軟體安裝根目錄,裡面有海康準備好的各種語言的demo源碼。

(1)說實話demo有點多不太清楚是哪個,我平時使用如果有疑問也是直接找海康威視的技術服務提問的,要靈活運用自己手中的資源,下面就直接講我平時是怎麼快速調用的。

C#快速調用海康威視工業相機的SDK拍照擷取圖檔
C#快速調用海康威視工業相機的SDK拍照擷取圖檔

02

我平時用的也是海康官方Demo裡MvCameraControl.Net.dll,以及根據Demo的源碼封裝出自己常用的功能:枚舉裝置,打開相機,設定曝光時間,拍照擷取圖檔,關閉相機。

(1)将MvCameraControl.Net.dll和HkCameraCltr類放入項目中,引用dll,添加類

C#快速調用海康威視工業相機的SDK拍照擷取圖檔
C#快速調用海康威視工業相機的SDK拍照擷取圖檔
C#快速調用海康威視工業相機的SDK拍照擷取圖檔
C#快速調用海康威視工業相機的SDK拍照擷取圖檔
C#快速調用海康威視工業相機的SDK拍照擷取圖檔

(2)添加成功之後直接使用這個工具類,裡面封裝好的函數如下,都是根據demo封裝的函數

C#快速調用海康威視工業相機的SDK拍照擷取圖檔

03

繼續沿用上一個文章的聯合程式設計解決方案來實作拍照顯示功能

(1)加入兩個新的按鈕:開啟相機和拍照,代碼實作如下:

C#快速調用海康威視工業相機的SDK拍照擷取圖檔

這裡調用了三個函數,開啟相機按鈕:枚舉相機EnumDevices()(意思是尋找相機裝置),尋找成功後會有一個傳回值傳回值是目前網段連接配接的相機數量,第二步直接開啟相機OpenDevices("相機名字"),這個相機名字最為關鍵,需要在MVS軟體裡面先配置好本地與相機的IP位址為同一網段,連接配接進相機後尋找相機的名字,然後這個函數所需要的參數就是MVS裡的這個相機名字,傳回值一樣是0就成功開啟,第三是拍照擷取圖檔,函數會輸出hobject類型的資料,放到寫好的image變量就行了,擷取圖檔成功就跟之前顯示本地圖檔一樣,顯示到視窗就完成了。

/// <summary>
        /// 開啟相機按鈕
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            //enumerationResult傳回值如果不等于0,則為枚舉成功
            int enumerationResult = HkCameraCltr.GetInstance().EnumDevices();
            if (enumerationResult != 0)
            {
                //枚舉成功之後開啟相機,同樣cameraresults傳回值為0則是開啟成功
                int cameraresults = HkCameraCltr.GetInstance().OpenDevices("相機名字");
                if (cameraresults == 0)
                {
                    MessageBox.Show("相機開啟成功");
                }
            }
        }
        /// <summary>
        /// 拍照按鈕
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            //拍照,傳回值為0則是拍照成功
            int takepicturesrelust = HkCameraCltr.GetInstance().Capture(out image);
            //拍照成功之後,跟之前擷取本地圖檔一樣,直接将圖檔顯示到視窗
            if (takepicturesrelust == 0)
            {
                HOperatorSet.GetImageSize(image, out HTuple Image_width, out HTuple Image_height);//獲得圖檔尺寸
                HOperatorSet.SetPart(windowsHandle, 0, 0, Image_height - 1, Image_width - 1);
                HOperatorSet.DispObj(image, windowsHandle);
            }
        }

      

DEMO連結:

​https://pan.baidu.com/s/1jZr-VhzKG3T5Q9GmMBfNlQ">​https://pan.baidu.com/s/1jZr-VhzKG3T5Q9GmMBfNlQ​​

提取碼:mkj7

繼續閱讀