本文章開頭會先講一下如何找到SDK包和demo,功能的實作我會直接用平時常用的DLL以及根據海康威視給的demo封裝好的常用功能類,這些都會分享到文末的連結中。
注:halcon雖然有讀取相機拍照的功能,但是我認為海康應該會更懂自己家的産品,SDK做的功能會更穩定且友善使用,所有使用相機的過程中盡量多用相機廠家自帶的SDK開發包。
01
—
第一步先在海康機器人官網下載下傳MVS軟體,安裝完成後進入軟體安裝根目錄,裡面有海康準備好的各種語言的demo源碼。
(1)說實話demo有點多不太清楚是哪個,我平時使用如果有疑問也是直接找海康威視的技術服務提問的,要靈活運用自己手中的資源,下面就直接講我平時是怎麼快速調用的。

02
—
我平時用的也是海康官方Demo裡MvCameraControl.Net.dll,以及根據Demo的源碼封裝出自己常用的功能:枚舉裝置,打開相機,設定曝光時間,拍照擷取圖檔,關閉相機。
(1)将MvCameraControl.Net.dll和HkCameraCltr類放入項目中,引用dll,添加類
(2)添加成功之後直接使用這個工具類,裡面封裝好的函數如下,都是根據demo封裝的函數
03
—
繼續沿用上一個文章的聯合程式設計解決方案來實作拍照顯示功能
(1)加入兩個新的按鈕:開啟相機和拍照,代碼實作如下:
這裡調用了三個函數,開啟相機按鈕:枚舉相機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