关于一些音视频编解码的ISP相关的
目前比较熟悉海思系列的主控ISP,如果有这块的疑问,可以留言,给出一些想法,看看能否突破下, 只涉及相关主控ISP API调用和思路,不涉及到OpenCV或DSP图像算法的(因为我也不太熟悉)
关于线阵相机相关的
这块刚调完海康的线阵相机,效果还是不错的,仅提供相关的思路和API接口相关的,结构设计,补光设计, 装配等可讨论互相学习,如下为分辨率2048*1024的调试效果(某康型号MV-CL022-40GC, 2K网口线阵,彩色):
原始数据bmp比较大,有18M, 无法上传,截图如下:
*海康系列
链接: 海康线阵相机调试指导
*度申系列
相机参数:
代码块:
#include "rob_mvs_feature_tree.h"
/**
*属性树
备注:note部分依工具为主,xls中确认未更新。
**/
FEATURE_TREE_S ft_info[FEATURE_TREE_OTHERS] =
{
{
/*Feature*/
"Device Control","设备控制",
/* 名称 数据类型 访问模式 描述*/
{
{ 0, "DeviceType", "IEnumeration", "设备类型"},
{ 1, "DeviceScanType", "IEnumeration", "设备sensor的扫描方式,表明是线阵相机还是面阵相机"},
{ 2, "DeviceVendorName", "IString", "设备的制造商名称"},
{ 3, "DeviceModelName", "IString", "设备型号"},
{ 4, "DeviceManufacturerInfo", "Istring", "设备的制造商信息"},
{ 5, "DeviceVersion", "IString ", "设备版本"},
{ 6, "DeviceFirmwareVersion", "IString", "固件版本"},
{ 7,"DeviceSerialNumber", "IString", "设备序列号"},
{ 8, "DeviceID", "Istring", "设备ID"},
{ 9, "DeviceUserID", "IString", "用户自定义的名称"},
{ 10, "DeviceUptime", "IInteger", "设备运行时间"},
{ 11, "BoardDeviceType", "IInteger", "设备类型"},
{ 12, "DeviceConnectionSelector", "IInteger", "设备连接选择"},
{ 13, "DeviceConnectionSpeed", "IInteger", "设备连接速度"},
{ 14, "DeviceConnectionStatus", "IEnumeration", "设备连接状态"},
{ 15, "DeviceLinkSelector", "IInteger", "设备连接选择"},
{ 16, "DeviceLinkSpeed", "IInteger", "设备连接速度"},
{ 17, "DeviceLinkConnectionCount", "IInteger", "设备连接数量"},
{ 18, "DeviceLinkHeartbeatMode", "IEnumeration", "是否需要心跳"},
{ 19, "DeviceLinkHeartbeatTimeout", "IInteger", "心跳超时时间"},
{ 20, "DeviceStreamChannelCount", "IInteger", "流通道数量"},
{ 21, "DeviceStreamChannelSelector", "IInteger", "流通道选择"},
{ 22, "DeviceStreamChannelType", "IEnumeration", "流通道类型"},
{ 23, "DeviceStreamChannelLink", "IInteger", "流通道连接数量"},
{ 24, "DeviceStreamChannelEndianness","IEnumeration", "图像数据的字节序"},
{ 25, "DeviceStreamChannelPacketSize","IInteger", "接收端流数据的包大小"},
{ 26, "DeviceEventChannelCount", "IInteger", "设备支持的"},
{ 27, "DeviceCharacterSet", "IEnumeration", "设备寄存器中使用的字符集"},
{ 28, "DeviceReset", "ICommand", "重启设备"},
{ 29, "DeviceTemperatureSelector", "IEnumeration", "选择某个部件温度测量"},
{ 30, "DeviceTemperature", "IFloat", "选中的设备部件温度"},
{ 31, "FindMe", "ICommand", "发现当前设备"},
{ 32, "DeviceMaxThroughput", "IInteger", "设备最大吞吐量(带宽"},
}
},
{
"ImageFormatControl","图像格式控制", /**/
{
{ 0, "WidthMax", "IInteger", "图像最大宽度,binning之后的数据"},
{ 1, "HeightMax", "IInteger", "图像最大高度,binning之后的数据"},
{ 2, "RegionSelector", "IEnumeration", "ROI选择器"},
{ 3, "RegionDestination", "IEnumeration", "该ROI对应的码流"},
{ 4, "Width", "IInteger", "ROI的宽"},
{ 5, "Height", "IInteger", "ROI的高"},
{ 6, "OffsetX", "IInteger", "ROI的水平方向偏移量"},
{ 7, "OffsetY", "IInteger", "ROI的竖直方向偏移量"},
{ 8, "ReverseX", "IBoolean", "是否需要水平翻转"},
{ 9, "ReverseY", "IBoolean", "是否需要竖直翻转"},
{10, "ReverseScanDirection", "IBoolean", "转换扫描方向"},
{11, "PixelFormat", "IEnumeration", "图像像素格式,不同型号的相机,支持的像素格式有差异,以实际的为准"},
{12, "PixelSize", "IEnumeration", "一个像素包含的比特数"},
{13, "ImageCompressionMode", "IEnumeration", "图像压缩模式"},
{14, "ImageCompressionQuality", "IInteger", "图像压缩质量"},
{15, "TestPatternGeneratorSelector", "IEnumeration", "测试图像生成器选择"},
{16, "TestPattern[TestPatternGeneratorSelector]", "IEnumeration", "测试图像选择"},
{17, "BinningSelector ", "IEnumeration", "像素合并选择"},
{18, "BinningHorizontal[BinningSelector]", "IEnumeration", "水平像素合并"},
{19, "BinningVertical[BinningSelector] ", "IEnumeration", "垂直像素合并"},
{20, "DecimationHorizontal", "IEnumeration", "水平像素采样"},
{21, "DecimationVertical", "IEnumeration", "垂直像素采样"},
{22, "Deinterlacing", "IEnumeration", "~"},
{23, "FrameSpecInfoSelector", "IEnumeration", "水印信息选择"},
{24, "FrameSpecInfo", "IBoolean", "是否使能该水印信息"},
}
},
{
"AcquisitionControl","采集控制", /**/
{
{ 0, "AcquisitionMode", "IEnumeration", "采集模式,单帧、多帧、连续"},
{ 1, "AcquisitionStart", "ICommand", "开始取流"},
{ 2, "AcquisitionStop", "ICommand", " 结束取流"},
{ 3, "AcquisitionBurstFrameCount", "IInteger", " 一次触发采集的帧数"},
{ 4, "AcquisitionFrameRate", "IFloat", "Trigger Mode是off的时候该值生效"},
{ 5, "AcquisitionFrameRateEnable", "IBoolean", " 设置的帧速率是否起效"},
{ 6, "AcquisitionLineRate", "IInteger", "行频设置"},
{ 7, "AcquisitionLineRateEnable", "IBoolean", " 行频控制使能"},
{ 8, "ResultingLineRate", "IInteger", "实际行频"},
{ 9, "ResultingFrameRate", "IFloat", "相机的实际采集帧率"},
{10, "TriggerSelector", "IEnumeration", "触发事件选择"},
{11, "TriggerMode[TriggerSelector]", "IEnumeration", "触发模式"},
{12, "TriggerSoftware[TriggerSelector]", "ICommand", " 执行一次软触发"},
{13, "TriggerSource[TriggerSelector]", "IEnumeration", "触发源"},
{14, "TriggerActivation[TriggerSelector]", "IEnumeration", "触发上升沿、下降沿、高电平、低电平等"},
{15, "TriggerDelay[TriggerSelector]", "IFloat", "触发延时"},
{16, "TriggerCacheEnable", "IBoolean", "是否使能触发缓存"},
{17, "SensorShutterMode", "IEnumeration", "设置传感器曝光模式"},
{18, "ExposureMode", "IEnumeration", "曝光模式选择"},
{19, "ExposureTime", "IFloat", "曝光时间"},
{20, "ExposureAuto", "IEnumeration", "自动曝光"},
{21, "AutoExposureTimeLowerLimit", "IInteger", "自动曝光下限"},
{22, "AutoExposureTimeUpperLimit", "IInteger", "自动曝光上限"},
{23, "GainShutPrior", "IEnumeration", "设置增益和曝光的优先级"},
{24, "FrameTimeoutEnable", "IBoolean", "帧超时使能"},
{25, "FrameTimeoutTime", "IInteger", "帧超时时间"},
{26, "HDREnable ", "IBoolean", "是否使能宽动态"},
{27, "HDRSelector", "IInteger", "HDR选择器"},
{28, "HDRShuter", "IInteger", "HDR曝光值"},
{29, "HDRGain", "IFloat", "HDR增益值"},
}
},
{
"DigitalIOControl", "数字IO控制",
{
{ 0, "LineSelector", "IEnumeration", "I/O选择"},
{ 1, "LineMode[LineSelector] ", "IEnumeration", "I/O模式"},
{ 2, "LineInverter[LineSelector]", "IBoolean", "I/O电平转换"},
{ 3, "LineTermination ", "IBoolean", "I/O单端差分选择"},
{ 4, "LineStatus[LineSelector]", "IBoolean", "I/O 状态"},
{ 5, "LineStatusAll ", "IInteger", "所有I/O状态"},
{ 6, "LineSource[LineSelector]"," IEnumeration", "输出的事件源"},
{ 7, "StrobeEnable", "IBoolean", ""},
{ 8, "LineDebouncerTime", "IInteger", "I/O去抖时间"},
{ 9, "StrobeLineDuration", "IInteger", "输出电平持续时间,单位us"},
{10, "StrobeLineDelay", "IInteger", "输出延时,单位us"},
{11, "StrobeLinePreDelay", "IInteger", "预延时,单位us"},
}
},
{
"Counter And Timer Control","计数器和定时器控制",
{
{ 0, "CounterSelector ", "IEnumeration", "计数器选择"},
{ 1, "CounterEventSource[CounterSelector]", "IEnumeration", "计数器事件源"},
{ 2, "CounterResetSource[CounterSelector]", "IEnumeration", "计数器复位源"},
{ 3, "CounterReset[CounterSelector]", "ICommand", "计数器复位"},
{ 4, "CounterValue[CounterSelector] ", "IInteger", "计数器值"},
{ 5, "CounterCurrentValue", "IInteger", "计数器当前值"},
}
},
{
"Analog Controls", "模拟控制",
{
{ 0, "Gain[GainSelector]", "IFloat", "增益值"},
{ 1, "GainAuto[GainSelector]", "IEnumeration", "自动增益"},
{ 2, "AutoGainLowerLimit", "IFloat", "自动增益下限"},
{ 3, "AutoGainUpperLimit", "IFloat", "自动增益上限"},
{ 4, "ADCGainEnable ", "IBoolean", "ADC 增益使能"},
{ 5, "DigitalShift", "IFloat", "数字偏移调节"},
{ 6, "DigitalShiftEnable", "IBoolean", "数字偏移使能"},
{ 7, "Brightness", "IInteger", "亮度"},
{ 8, "BlackLevel[BlackLevelSelector]", "Iinteger", "黑电平调节"},
{ 9, "BlackLevelEnable", "IBoolean", "黑电平调节使能"},
{10, "BlackLevelAuto[BlackLevelSelector]", "IEnumeration", "黑电平调节方式"},
{11, "BalanceWhiteAuto", "Ienumeration", "自动白平衡"},
{12, "BalanceRatioSelector", "Ienumeration", "白平衡比例选择"},
{13, "BalanceRatio[BalanceRatioSelector]", "Iinteger", "白平衡值"},
{14, "Gamma ", "IFloat", "伽马调节"},
{15, "GammaSelector", "Ienumeration", "Gamma选择"},
{16, "GammaEnable", "IBoolean", "Gamma使能"},
{17, "Sharpness ", "IInteger", "图像锐度"},
{18, "SharpnessEnable", "IBoolean", "启用/禁用锐度调节"},
{19, "SharpnessAuto", "IEnumeration", "锐度自动调节类型"},
{20, "Hue", "IInteger", "色度值调节"},
{21, "HueEnable", "IBoolean", "色度使能"},
{22, "HueAuto", "IEnumeration", "灰度自动调节类型"},
{23, "Saturation", "IInteger", "饱和度值调节"},
{24, "SaturationEnable", "IBoolean", "饱和度使能"},
{25, "SaturationAuto", "IEnumeration", "饱和度自动调节类型"},
{26, "DigitalNoiseReductionMode", "IEnumeration", "数字降噪等级选择"},
{27, "NoiseReduction", "IInteger", "降噪值"},
{28, "AirspaceNoiseReduction", "IInteger", "空域降噪"},
{29, "TemporalNoiseReduction", "IInteger", "时域降噪"},
{30, "AutoFunctionAOISelector", "IEnumeration", "自动AOI选择"},
{31, "AutoFunctionAOIWidth", "IInteger", "自动AOI宽"},
{32, "AutoFunctionAOIHeight", "IInteger", "自动AOI高"},
{33, "AutoFunctionAOIOffsetX", "IInteger", "自动AOI水平方向偏移"},
{34, "AutoFunctionAOIOffsetY", "IInteger", "自动AOI竖直方向偏移"},
{35, "AutoFunctionAOIUsageIntensity", "IBoolean", "根据AOI区域自动曝光"},
{36, "AutoFunctionAOIUsageWhiteBalance", "IBoolean", "根据AOI区域自动白平衡"},
}
},
{
"LUT Control", "显示查找表控制",
{
{ 0, "LUTSelector", "IEnumeration", "亮度、R\G\B"},
{ 1, "LUTEnable[LUTSelector]", "IBoolean", "使能"},
{ 2, "LUTIndex[LUTSelector]", "IInteger", "索引号"},
{ 3, "LUTValue[LUTSelector][LUTIndex]", "IInteger", "值"},
{ 4, "LUTValueAll[LUTSelector]", "Register", "LUT所有的值"},
}
},
{
"EncoderControl", "编码器控制",
{
{ 0, "EncoderSelector", "IEnumeration", "编码器选择"},
{ 1, "EncoderSourceA", "IEnumeration", "编码器A源选择"},
{ 2, "EncoderSourceB", "IEnumeration", "编码器B源选择"},
{ 3, "EncoderTriggerMode", "IEnumeration", "编码器触发模式"},
{ 4, "EncoderCounterMode", "IEnumeration", "编码器计数模式"},
{ 5, "EncoderCounter", "IInteger", "编码器计数器值调节"},
{ 6, "EncoderCounterMax", "IInteger", "编码器计数器最大值"},
{ 7, "EncoderCounterReset", "ICommand", "编码器计数器复位"},
{ 8, "EncoderMaxReverseCounter", "IInteger", "编码器最大反转计数器值"},
{ 9, "EncoderReverseCounterReset", "ICommand", "编码器反转计数器复位"},
}
},
{
"FrequencyConverterControl", "变频器控制",
{
{ 0, "InputSource", "IEnumeration", "分频器输入源"},
{ 1, "SignalAlignment", "IEnumeration", "分频器信号方向"},
{ 2, "PreDivider", "IInteger", "前置分频器调节"},
{ 3, "Multiplier", "IInteger", "倍频器调节"},
{ 4, "PostDivider", "IInteger", "后置分频器调节"},
}
},
{
"ShadingCorrection", "阴影矫正",
{
{ 0, "ShadingSelector", "IEnumeration", "明暗场校正选择"},
{ 1, "ActivateShading", "ICommand", "主动校正"},
{ 2, "NUCEnable", "IBoolean", "NUC使能开关"},
{ 3, "FPNCEnable", "IBoolean", "FPNC状态开关"},
{ 4, "PRNUCEnable", "IBoolean", "PRNUC状态开关"},
}
},
{
"User Set Control", "用户集控制",
{
{ 0, "UserSetCurrent", "IInteger", "当前用户参数"},
{ 1, "UserSetSelector", "IEnumeration", "设置载入的参数"},
{ 2, "UserSetLoad[UserSetSelector]","ICommand", "加载"},
{ 3, "UserSetSave[UserSetSelector]","ICommand", "用户参数保存"},
{ 4, "UserSetDefault", "IEnumeration", "默认状态"},
}
},
{
"Transport Layer Control", "传输层控制",
{
{ 0, "PayloadSize", "IInteger", "一帧数据的大小"},
{ 1, "GevVersionMajor", "IInteger", "GEV主版本号"},
{ 2, "GevVersionMinor", "IInteger", "GEV子版本号"},
{ 3, "GevDeviceModeIsBigEndian", "IBoolean", "大端"},
{ 4, "GevDeviceModeCharacterSet", "IEnumeration", "字符集"},
{ 5, "GevInterfaceSelector", "IInteger", "GEV接口数"},
{ 6, "GevMACAddress", "IInteger", "MAC地址"},
{ 7, "GevSupportedOptionSelector", "IEnumeration", "相机可以支持的功能选项"},
{ 8, "GevSupportedOption[GevSupportedOptionSelector]", "IBoolean", "相机是否支持Selector 选择的功能"},
{ 9, "GevCurrentIPConfigurationLLA", "IBoolean", "IP是否为LLA"},
{10, "GevCurrentIPConfigurationDHCP[GevInterfaceSelector]", " IBoolean", "IP是否为DHCP"},
{11, "GevCurrentIPConfigurationPersistentIP[GevInterfaceSelector]", " IBoolean", "IP是否为静态IP"},
{12, "GevPAUSEFrameReception[GevInterfaceSelector]", "IBoolean", "控制PAUSE帧是否开启"},
{13, "GevCurrentIPAddress[GevInterfaceSelector]", "IInteger", "IP地址"},
{14, "GevCurrentSubnetMask[GevInterfaceSelector]", "IInteger", "子网掩码"},
{15, "GevCurrentDefaultGateway[GevInterfaceSelector]", "IInteger", "默认网关"},
{16, "GevFirstURL", "IString", "XML第一选择路径"},
{17, "GevSecondURL", "IString", "XML第二选择路径"},
{18, "GevNumberOfInterfaces", "IInteger", "GEV接口数"},
{19, "GevPersistentIPAddress[GevInterfaceSelector]", "IInteger", "静态IP地址"},
{20, "GevPersistentSubnetMask[GevInterfaceSelector]", "IInteger", "静态子网掩码"},
{21, "GevPersistentDefaultGateway[GevInterfaceSelector]", "IInteger", "静态默认网关"},
{22, "GevLinkSpeed", "IInteger", "网络速率"},
{23, "GevMessageChannelCount", "IInteger", "消息通道数"},
{24, "GevStreamChannelCount", "IInteger", "流通道"},
{25, "GevHeartbeatTimeout", "IInteger", "心跳超时时间"},
{26, "GevGVCPHeartbeatDisable", "IBoolean", "关闭心跳"},
{27, "GevTimestampTickFrequency", "IInteger", "时间戳频率"},
{28, "GevTimestampControlLatch", "ICommand", "获取时间戳"},
{29, "GevTimestampControlReset", "ICommand", "复位时间戳"},
{30, "GevTimestampControlLatchReset", "ICommand", "复位时间戳同时获取时间戳"},
{31, "GevTimestampValue", "IInteger", "时间戳值"},
{32, "GevCCP", "IEnumeration", "App端的控制权限"},
{33, "GevStreamChannelSelector", "IInteger", "流通道选择"},
{34, "GevSCPInterfaceIndex[GevStreamChannelSelector]", "IInteger", "GEV接口索引"},
{35, "GevSCPHostPort[GevStreamChannelSelector]", "IInteger", "主机端口"},
{36, "GevSCPDirectionGevStreamChannelSelector]", "IInteger", "表明流通道方向"},
{37, "GevSCPSFireTestPacket[GevStreamChannelSelector]", "IBoolean", "Fire Test Packet使能"},
{38, "GevSCPSDoNotFragment[GevStreamChannelSelector]", "IBoolean", "Fire Test Packet使能"},
{39, "GevSCPSBigEndian[GevStreamChannelSelector]", "IBoolean", "流数据大小端"},
{40, "PacketUnorderSupport", "IBoolean", "是否支持GVSP包乱序发送"},
{41, "GevSCPSPacketSize", "IInteger", "网络包大小"},
{42, "GevSCPD[GevStreamChannelSelector]", "IInteger", "发包延时"},
{43, "GevSCDA[GevStreamChannelSelector]", "IInteger", "流数据的目的地址"},
{44, "GevSCSP[GevStreamChannelSelector]", "IInteger", "流数据的源端口"},
{45, "TLParamsLocked", "IInteger", "取流时为1"}
}
}
} ;
关于面阵相机相关的
暂未接触过面阵相机这块,后续如有接触,会做更新。