OpenCvSharp 4.6实现 ThresholdTypes.Truz
时间: 2024-02-01 07:03:46 浏览: 133
ThresholdTypes.Truz 实际上是一个拼写错误,正确的拼写应该是 ThresholdTypes.Trunc。这个枚举值表示阈值类型为截断(Truncate)。在 OpenCvSharp 4.6 中,可以通过调用 Mat.Threshold 方法来实现该阈值类型,示例代码如下:
```csharp
using OpenCvSharp;
Mat src = Cv2.ImRead("image.jpg", ImreadModes.GrayScale);
Mat dst = new Mat();
Cv2.Threshold(src, dst, 128, 255, ThresholdTypes.Trunc);
Cv2.ImWrite("result.jpg", dst);
```
在上面的代码中,首先使用 ImRead 方法读取一张灰度图像,然后调用 Threshold 方法实现阈值化操作,并将结果保存到 dst 变量中,最后使用 ImWrite 方法将结果保存到文件中。其中,第一个参数表示输入图像,第二个参数表示输出图像,第三个参数表示阈值,第四个参数表示最大像素值,第五个参数表示阈值类型,这里设置为 ThresholdTypes.Trunc。
相关问题
double thresh = Cv2.Threshold(roiMat, new Mat(), 0, 255, ThresholdTypes.Binary | (isJudgeByGreatThan ? ThresholdTypes.Otsu : ThresholdTypes.OtsuInv));中opencvsharp4.6中没 ThresholdTypes.OtsuInv有
你好!对于opencvsharp 4.6版本,ThresholdTypes枚举中并没有OtsuInv选项,只有Binary、BinaryInv、Trunc、Tozero、TozeroInv、Mask和Triangle。如果你需要使用OtsuInv阈值类型,可以考虑升级到更高的版本或者使用其他的库。另外,对于二值化阈值的选择,Otsu方法是一种自适应的阈值选择方法,它可以根据图像的灰度分布自动选择最佳阈值,因此在处理一些复杂的图像时,可以考虑使用Otsu方法。
double thresh = Cv2.Threshold(roiMat, new Mat(), 0, 255, ThresholdTypes.Binary | (isJudgeByGreatThan ? ThresholdTypes.Otsu : ThresholdTypes.OtsuInv));中opencvsharp4.6中没有 ThresholdTypes.OtsuInv这个方法请用其它方法实现,编写新代码
好的,如果你想使用类似于OtsuInv的阈值类型,你可以考虑使用反相图像来实现。具体来说,可以先使用Otsu方法计算出一个阈值,然后将图像进行反相处理,再利用这个阈值进行二值化,这样就相当于使用了OtsuInv的阈值类型。下面是一个简单的示例代码:
```csharp
Mat grayImage = new Mat();
Cv2.CvtColor(srcImage, grayImage, ColorConversionCodes.BGR2GRAY);
Mat binaryImage = new Mat();
double otsuThreshold = Cv2.Threshold(grayImage, binaryImage, 0, 255, ThresholdTypes.Binary | ThresholdTypes.Otsu);
Cv2.BitwiseNot(grayImage, grayImage);
Cv2.Threshold(grayImage, binaryImage, otsuThreshold, 255, ThresholdTypes.Binary);
// binaryImage即为处理后的二值图像
```
在这段代码中,首先将原始图像转换为灰度图像,然后使用Otsu方法计算出一个阈值,并将图像进行反相处理。最后再利用这个阈值进行二值化,得到处理后的二值图像。
阅读全文