OpenCvSharp.Point[][] pointsArray转换为 var contours = new List<Point[]>();
时间: 2023-10-09 08:15:00 浏览: 122
你可以使用LINQ中的`Select`方法将`pointsArray`中的每个元素转换为`Point[]`类型,并将其添加到`contours`列表中。代码示例如下:
```
var contours = pointsArray.Select(points => points.ToArray()).ToList();
```
在上面的代码中,`Select`方法将`pointsArray`中的每个元素`points`转换为`Point[]`类型,并使用`ToArray`方法将其转换为数组。最后,`ToList`方法将所有的`Point[]`数组添加到`contours`列表中。
相关问题
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骨架提取
OpenCVSharp是一个.NET版本的OpenCV库,它提供了一种方便的方式来利用OpenCV的功能,包括图像处理、计算机视觉和机器学习等方面。骨架提取(Skeletonization)是指从二进制图像中提取出连通区域的主要轮廓线的过程。在OpenCVSharp中,你可以使用`cv2.findContours()`函数先找到图像中的轮廓,然后通过`cv2.approxPolyDP()`或`cv2.Canny()`等方法结合`cv2.HoughLinesP()`来提取骨架。
例如,你可以这样做:
```csharp
// 加载图像并转换为灰度
Mat img = Cv2.ImRead("image.jpg", ImreadModes.GrayScale);
// 进行边缘检测
Mat edges;
Cv2.Canny(img, edges, threshold1, threshold2);
// 查找轮廓
List<MatOfPoint> contours = new List<MatOfPoint>();
HierarchyIndex[] hierarchy;
Cv2.FindContours(edges, out contours, out hierarchy, RetrievalModes.List, ContourApproximationModes.ApproxSimple);
// 提取骨架
foreach (var contour in contours)
{
// 使用霍夫变换或其他方法提取轮廓的主要线条
Point[][] skeletonPoints = Cv2.ApproxPolyDP(contour, epsilon, true);
}
```
阅读全文