opencv的ContourApproximationModes讲解
时间: 2024-04-28 13:20:00 浏览: 191
ContourApproximationModes是OpenCV中用于轮廓近似的枚举类型,它包含了以下几种模式:
1. cv::ContourApproximationModes::CHAIN_APPROX_NONE:表示不进行轮廓近似,直接保留所有轮廓点。
2. cv::ContourApproximationModes::CHAIN_APPROX_SIMPLE:表示使用简单的近似方法,将轮廓中冗余的点去掉,只保留轮廓的端点。
3. cv::ContourApproximationModes::CHAIN_APPROX_TC89_L1:表示使用Teh-Chin链码近似算法进行轮廓近似。
4. cv::ContourApproximationModes::CHAIN_APPROX_TC89_KCOS:表示使用Teh-Chin链码近似算法进行轮廓近似,并使用Kcos近似方法进行优化。
其中,CHAIN_APPROX_NONE模式不进行轮廓近似,直接保留所有轮廓点,这在一些需要精确绘制轮廓的应用场景中比较常见。CHAIN_APPROX_SIMPLE模式则使用简单的近似方法,将轮廓中冗余的点去掉,只保留轮廓的端点,这在一些需要简化轮廓的应用场景中比较常见。CHAIN_APPROX_TC89_L1模式和CHAIN_APPROX_TC89_KCOS模式则使用了Teh-Chin链码近似算法进行轮廓近似,其中CHAIN_APPROX_TC89_KCOS模式还使用了Kcos近似方法进行优化,可以得到更加精确的轮廓近似结果,但是速度相对较慢。
相关问题
Cv2.FindContours(image, out var allContours, out _, RetrievalModes.List, ContourApproximationModes.ApproxSimple); OpenCVException: Unrecognized or unsupported array type OpenCvSharp.NativeMethods+<>c.<.cctor>b__1332_0 (OpenCvSharp.ErrorCode status, System.String funcName, System.String errMsg, System.String fileName, System.Int32 line, System.IntPtr userdata) (at <8745c248865442b0b751b51a12326060>:0) (wrapper native-to-managed) OpenCvSharp.NativeMethods+<>c.<.cctor>b__1332_0(OpenCvSharp.ErrorCode,intptr,intptr,intptr,int,intptr) OpenCvSharp.Cv2.FindContours (OpenCvSharp.InputOutputArray image, OpenCvSharp.Point[][]& contours, OpenCvSharp.HierarchyIndex[]& hierarchy, OpenCvSharp.RetrievalModes mode, OpenCvSharp.ContourApproximationModes method, System.Nullable`1[T] offset) (at <8745c248865442b0b751b51a12326060>:0)
根据您提供的代码和错误信息,问题可能出在输入图像的数组类型上。函数 `Cv2.FindContours` 要求输入的图像是 OpenCV 支持的特定数组类型,而您的输入图像可能不符合要求。
要解决这个问题,您可以尝试将输入图像转换为正确的数组类型。例如,您可以使用 `Cv2.CvtColor` 函数将图像转换为灰度图像,然后再应用 `Cv2.FindContours`。下面是一个示例代码:
```csharp
using OpenCvSharp;
// 读取图像
Mat image = Cv2.ImRead("image.jpg", ImreadModes.Color);
// 将图像转换为灰度图像
Mat grayImage = new Mat();
Cv2.CvtColor(image, grayImage, ColorConversionCodes.BGR2GRAY);
// 查找轮廓
Point[][] contours;
HierarchyIndex[] hierarchy;
Cv2.FindContours(grayImage, out contours, out hierarchy, RetrievalModes.List, ContourApproximationModes.ApproxSimple);
// 处理轮廓
// ...
```
请注意,这只是一个示例,具体的解决方法可能因您的实际情况而有所不同。如果问题仍然存在,请提供更多关于您的代码和输入图像的信息,以便更好地帮助您解决问题。
opencvsharp的FindContours方法讲解
`FindContours` 是 OpenCVSharp 库中的一个函数,用于在二值图像中查找轮廓。它的函数原型如下:
```csharp
static void Cv2.FindContours(
InputArray image,
OutputArray contours,
OutputArray hierarchy,
RetrievalModes mode,
ContourApproximationModes method,
Point offset = default,
bool? usePreviousMode = default
)
```
其中:
- `image`:输入二值图像,要求为 8 位单通道图像。
- `contours`:输出的轮廓序列,每个轮廓是一个包含点集的向量。
- `hierarchy`:输出的轮廓的层级结构,可选参数,可以为 null。
- `mode`:轮廓检索模式,有两种可选类型:`RetrievalModes.List` 和 `RetrievalModes.CComp`。
- `method`:轮廓逼近方法,有三种可选类型:`ContourApproximationModes.ChainApproxNone`、`ContourApproximationModes.ChainApproxSimple` 和 `ContourApproximationModes.ChainApproxTC89L1`。
- `offset`:轮廓点的相对偏移量,可以为默认值。
- `usePreviousMode`:是否使用上一次检索模式,可以为 null。
`FindContours` 函数的作用是在输入的二值图像中寻找轮廓,它将每个轮廓作为一个点集返回,并且可以使用 `hierarchy` 参数来描述轮廓之间的关系,如父子关系等。`contours` 参数中的每个轮廓是一个包含点集的向量,每个点是一个 OpenCVSharp 中的 `Point` 类型。轮廓的检索模式和逼近方法可以根据需要选择不同的参数。
阅读全文