VS(C#)调用海康工业相机SDK采集图像及基本功能设定
简介
由于工作关系,本人最近使用到了海康的网口及USB3.0接口的工业相机。现将相关内容进行整理记录。
开发环境
64位VS2013 +C#
Halcon12
海康MVS3.0.0
引用海康相机动态库(MvCameraControl.Net.dll)
在VS项目文件中添加添加引用,如下图
引用MVS安装目录下MVS\Development\DotNet\MvCameraControl.Net.dll这个文件。
创建相机类
鼠标右键单击工程项目–添加–类,选择“类”,输入类的名称,例如Hikvision,点击右下角的“添加”。
在项目中使用海康相机时,为便于程序编写,可引入如下的命名空间:
using MvCamCtrl.NET;
创建需要用到的全局变量
public MyCamera myCamera;//相机对象
private MyCamera.MV_CC_DEVICE_INFO_LIST deviceList;//设备列表
private MyCamera.MV_CC_DEVICE_INFO deviceInfo;//设备对象
private string seriesStr;//接收相机序列号
private MyCamera.MVCC_INTVALUE stParam;//用于接收特定的参数
//为读取、保存图像创建的数组
UInt32 m_nBufSizeForDriver = 4096 * 3000;
byte[] m_pBufForDriver = new byte[4096 * 3000];
UInt32 m_nBufSizeForSaveImage = 4096 * 3000 * 3 + 3000;
byte[] m_pBufForSaveImage = new byte[4096 * 3000 * 3 + 3000];
创建相关函数
1.创建构造函数
//在构造函数中实例化设备列表对象
public Hikvision()
{
deviceList = new MyCamera.MV_CC_DEVICE_INFO_LIST();
}
2.创建改变相机IP的函数
//成功返回0失败返回-1
//调用函数时可以传入需要改变的目标IP,如过没有传入则将相机IP设置为其所连接的网卡地址+1或-1
public int changeIP(string IP = "")
{
try
{
//获取相机相关信息,例如相机所连接网卡的网址
IntPtr buffer = Marshal.UnsafeAddrOfPinnedArrayElement(deviceInfo.SpecialInfo.stGigEInfo, 0);
MyCamera.MV_GIGE_DEVICE_INFO gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO)Marshal.PtrToStructure(buffer, typeof(MyCamera.MV_GIGE_DEVICE_INFO));
IPAddress cameraIPAddress;
string tempStr = "";
if (IP.Trim().Equals("") || !(IPAddress.TryParse(IP, out cameraIPAddress)))
{
//当前网卡的IP地址
UInt32 nNetIp1 = (gigeInfo.nNetExport & 0xFF000000) >> 24;
UInt32 nNetIp2 = (gigeInfo.nNetExport & 0x00FF0000) >> 16;
UInt32 nNetIp3 = (gigeInfo.nNetExport & 0x0000FF00) >> 8;
UInt32 nNetIp4 = (gigeInfo.nNetExport & 0x000000FF);
//根据网卡IP设定相机IP,如果网卡ip第四位小于252,则相机ip第四位+1,否则相机IP第四位-1
UInt32 cameraIp1 = nNetIp1;
UInt32 cameraIp2 = nNetIp2;
UInt32 cameraIp3 = nNetIp3;
UInt32 cameraIp4 = nNetIp4;
if (nNetIp4 < 252)
{
cameraIp4++;
}
else
{
cameraIp4--;
}
tempStr = cameraIp1 + "." + cameraIp2 + "." + cameraIp3 + "." + cameraIp4;
}
else
{