C#+VisionMaster联合开发(五)_全局相机

1、获取相机列表

ModuleInfoList moduleInfoList = VmSolutionMain.GetAllModuleList();
if (moduleInfoList.nNum > 0)
{
    List<string> cameraModuleNames = moduleInfoList.astModuleInfo.Where(a => !string.IsNullOrEmpty(a.strDisplayName) && "GlobalCameraModule".Equals(a.strModuleName)).Select(a => a.strDisplayName).ToList();
    cmbCameraName.DataSource = cameraModuleNames;
    cmbCameraName.SelectedIndex = cameraModuleNames.Count > 0 ? 0 : -1;
}

// 获取相机对象
//GlobalCameraModuleTool cameraModuleTool = (GlobalCameraModuleTool)VmSolutionMain["相机名"];  // 方式一
//if(VmSolutionMain["相机名"] is GlobalCameraModuleTool cameraModuleTool){ } else{  // 提示未找到相机'相机名'} // 方式二

2、获取相机参数

  GlobalCameraModuleTool对象中的参数目前获取数据没问题。修改数据有点问题,只要是获取不到的数据修改后保存不了。

(1)方式一(不推荐)

  有些数据获取时代码报错,海康的问题。

//bool bIsCameraConnect = moduleTool.bIsCameraConnect();          // 连接状态
//GlobalCameraParam globalCameraParam = moduleTool.ModuParams;    // 相机参数
//string cameraSN = globalCameraParam.GetChosenCameraSN();        // 相机SN
//var cameraInfoList = globalCameraParam.GetCameraInfoList();
//string cameraModel = cameraInfoList.nNum > 0 ? cameraInfoList.astCameraInfo[0].strCameraName : string.Empty;  // 相机型号
//string cameraMold = globalCameraParam.CameraMold.ToString();    // 相机类型
//string gammaEnable = globalCameraParam.GammaEnable.ToString();      // 伽马使能
//GammaSelectorEnum gammaSelector = globalCameraParam.GammaSelector;  // 伽马选择器
//double exposureTime = globalCameraParam.ExposureTime;               // 曝光时间
//double gain = globalCameraParam.Gain;                               // 增益
//string gama = string.Empty;
//cameraModuleTool.ModuParams.GetParamValue("Gamma", ref gama);       // 伽马
//gama = gama.Split('$')[0];
//int width = globalCameraParam.Width;                   // 图像宽度
//int height = globalCameraParam.Height;                 // 图像高度
//int triggerSource = globalCameraParam.TriggerSource;   // 触发源
//double triggerDelay = globalCameraParam.TriggerDelay;  // 延迟触发
(2)方式二(目前推荐用)
if (VmSolutionMain[cameraName] is GlobalCameraModuleTool cameraModuleTool)
{
#region 获取参数 cameraModuleTool
bool bIsCameraConnect = cameraModuleTool.bIsCameraConnect();        // 连接状态
GlobalCameraParam globalCameraParam = cameraModuleTool.ModuParams;  // 相机参数
string cameraSN = globalCameraParam.GetChosenCameraSN();                                                      // 相机SN
var cameraInfoList = globalCameraParam.GetCameraInfoList();
string cameraModel = cameraInfoList.nNum > 0 ? cameraInfoList.astCameraInfo[0].strCameraName : string.Empty;  // 相机型号

string cameraMold = globalCameraParam.CameraMold.ToString();  // 相机类型;CommonCamera普通相机、SmartCamera智能相机、DalsaCamera线阵相机 
string gammaEnable = globalCameraParam.GammaEnable.ToString();   // 伽马使能;true、false

// 伽马选择器(兼容相机未拍照的情况)
string gammaSelector = string.Empty;
cameraModuleTool.ModuParams.GetParamValue("GammaSelector", ref gammaSelector);  // 伽马选择器;USER、SRGB
gammaSelector = gammaSelector.Split('$')[0];

// 曝光时间(兼容相机未拍照的情况)
string exposureTime = string.Empty;
cameraModuleTool.ModuParams.GetParamValue("ExposureTime", ref exposureTime);
exposureTime = exposureTime.Split('$')[0];
// 增益(兼容相机未拍照的情况)
string gain = string.Empty;
cameraModuleTool.ModuParams.GetParamValue("Gain", ref gain);     // 增益
gain = gain.Split('$')[0];
// 伽马(兼容相机未拍照的情况)
string gama = string.Empty;
cameraModuleTool.ModuParams.GetParamValue("Gamma", ref gama);    // 伽马
gama = gama.Split('$')[0];

// 像素格式(兼容相机未拍照的情况)
string pixelFormat = string.Empty;
cameraModuleTool.ModuParams.GetParamValue("PixelFormat", ref pixelFormat);    // 像素格式
pixelFormat = pixelFormat.Split('$')[0];

// 触发源(兼容相机未拍照的情况)
string triggerSource = string.Empty;
cameraModuleTool.ModuParams.GetParamValue("TriggerSource", ref triggerSource);  // 触发源
triggerSource = triggerSource.Split('$')[0];

// 延迟触发(兼容相机未拍照的情况)
string triggerDelay = string.Empty;
cameraModuleTool.ModuParams.GetParamValue("TriggerDelay", ref triggerDelay);  // 延迟触发
triggerDelay = triggerDelay.Split('$')[0];

// 图像宽度(兼容相机未拍照的情况)
string width = string.Empty;
cameraModuleTool.ModuParams.GetParamValue("Width", ref width);    // 图像宽度
width = width.Split('$')[0];

// 图像高度(兼容相机未拍照的情况)
string height = string.Empty;
cameraModuleTool.ModuParams.GetParamValue("Height", ref height);  // 图像高度
height = height.Split('$')[0];
#endregion 获取参数

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine($"‘获取相机信息’执行完成!相机信息如下:");
stringBuilder.AppendLine($"  连接状态={bIsCameraConnect},");
stringBuilder.AppendLine($"  相机SN={cameraSN},");
stringBuilder.AppendLine($"  相机型号={cameraModel},");
stringBuilder.AppendLine($"  相机类型={cameraMold},");
stringBuilder.AppendLine($"  像素格式={pixelFormat},");
stringBuilder.AppendLine($"  触发源={triggerSource},");
stringBuilder.AppendLine($"  延迟触发={triggerDelay},");
stringBuilder.AppendLine($"  图像宽度={width},");
stringBuilder.AppendLine($"  图像高度={height},");
stringBuilder.AppendLine($"  曝光时间={exposureTime},");
stringBuilder.AppendLine($"  增益={gain},");
stringBuilder.AppendLine($"  伽马使能={gammaEnable},");
stringBuilder.AppendLine($"  伽马选择器={gammaSelector},");
stringBuilder.AppendLine($"  伽马={gama}");
ShowLog(stringBuilder.ToString());
}

3、修改相机参数

(1)修改(示例为修改伽马值;记得保存方案)
 if (VmSolutionMain[cameraName] is GlobalCameraModuleTool cameraModuleTool)
 {
     #region 设置参数
     //cameraModuleTool.ModuParams.ExposureTime = 1111;
     //cameraModuleTool.ModuParams.Gain = 1.2;
     cameraModuleTool.ModuParams.SetParamValue("Gamma", gamaStr);  // 伽马
     #endregion 设置参数

     #region 获取参数
     // 伽马(兼容相机未拍照的情况)
     string gamaNew = string.Empty;
     cameraModuleTool.ModuParams.GetParamValue("Gamma", ref gamaNew);  // 伽马
     gamaNew = gamaNew.Split('$')[0];
     #endregion 获取参数

     StringBuilder stringBuilder = new StringBuilder();
     stringBuilder.AppendLine($"‘设置相机信息_伽马值’执行完成!相机信息如下:");
     stringBuilder.AppendLine($"  伽马={gamaNew}");
     ShowLog(stringBuilder.ToString());
 }
(2)补充说明

  对于我们来讲,一般情况下获取修改相机参数 并不是直接对上面的相机对象'GlobalCameraModuleTool'进行操作。我们一般是修改流程中‘图像源’模块的参数。如下:

  image

  在里面,我们可以修改相机曝光、增益值,这些都可以用代码实现。但是修改不了伽马值,修改伽马值只能使用上文中的示例,即对GlobalCameraModuleTool对象进行直接操作,且需要启用Gamma使能,选择器选择'USER'。

  image

posted @ 2025-12-14 21:30  ꧁执笔小白꧂  阅读(3)  评论(0)    收藏  举报