Emug cv C#最小阈值截断

Emug cv C#最小阈值截断,c#,opencv,emgucv,C#,Opencv,Emgucv,在C#中使用emug cv 4.4 假设我有覆盖整个范围的16位灰度图像。我想将下限和上限值截断为预定义的最小值和最大值,然后对图像进行规格化,以便覆盖整个可能的范围 对于向上限值转移,有一个简单的解决方案: CvInvoke.Threshold(imgIn, imgOut, max, 65535, ThresholdType.Trunc); 返回: "value = value > threshold ? threshold : value" 我想要相同的方法,但

在C#中使用emug cv 4.4

假设我有覆盖整个范围的16位灰度图像。我想将下限和上限值截断为预定义的最小值和最大值,然后对图像进行规格化,以便覆盖整个可能的范围

对于向上限值转移,有一个简单的解决方案:

CvInvoke.Threshold(imgIn, imgOut, max, 65535, ThresholdType.Trunc);
返回:

"value = value > threshold ? threshold : value"
我想要相同的方法,但是对于最小值,所以要这样做

"value = value < threshold ? threshold : value"
我想知道是否有更优雅的解决方案。 稍后,我将此图像转换为8位并应用着色

CvInvoke.Normalize(imgOut, imgOut, 0, 255, NormType.MinMax, DepthType.Cv8U);
CvInvoke.ApplyColorMap(imgOut, imgOutColor, Emgu.CV.CvEnum.ColorMapType.Jet);

总之,我想将16位灰度输入图像截断为预定义的最小值和最大值,对其范围进行规格化,以覆盖整个8位图像,以便对其进行着色。

我理解您的问题是专门针对阈值/截断的,并且您对后续的规格化感到满意

EmguCV的一个鲜为人知的技巧是使用
Image.Convert()
将“像素级”函数委托应用于图像。为了满足您的需求,您可以使用自己的逻辑:

Image minthreshold=inputImage.Convert((值)=>value=valuevalue=value>upperThreshold?upperThreshold:value);

您可能有兴趣在这里阅读Luca和我的答案:

我理解您的问题是专门针对阈值/截断的,您对随后的标准化感到满意

EmguCV的一个鲜为人知的技巧是使用
Image.Convert()
将“像素级”函数委托应用于图像。为了满足您的需求,您可以使用自己的逻辑:

Image minthreshold=inputImage.Convert((值)=>value=valuevalue=value>upperThreshold?upperThreshold:value);

您可能有兴趣在这里阅读Luca和我的答案:

欢迎来到stackoverflow!祝贺你提出第一个问题;完全符合所有最佳实践:)欢迎使用stackoverflow!祝贺你提出第一个问题;完全符合所有最佳实践:)
CvInvoke.Normalize(imgOut, imgOut, 0, 255, NormType.MinMax, DepthType.Cv8U);
CvInvoke.ApplyColorMap(imgOut, imgOutColor, Emgu.CV.CvEnum.ColorMapType.Jet);