opencvsharp 把List<Point>转Point[][]
时间: 2024-01-05 10:04:55 浏览: 18
你可以使用以下代码将 `List<Point>` 转换为 `Point[][]`:
```csharp
List<Point> pointList = new List<Point>();
// 添加点到 pointList 中
int rows = 1; // 行数
int cols = pointList.Count; // 列数
// 将 pointList 转换为 Point[] 数组
Point[] points = pointList.ToArray();
// 将 Point[] 转换为 Point[][] 数组
Point[][] pointArray = new Point[rows][];
for (int i = 0, j = 0; i < rows; i++, j += cols)
{
pointArray[i] = points.Skip(j).Take(cols).ToArray();
}
```
这里我们先将 `List<Point>` 转换为 `Point[]`,再将 `Point[]` 转换为 `Point[][]`。你需要设置行数和列数,这里假设只有一行,列数为 `pointList` 的长度。如果有多行,需要计算每行的长度,然后分别转换为 `Point[]` 和 `Point[][]`。
相关问题
OPENCVSHARP IEnumerable<Point> curve初始化
在OpenCvSharp中,可以使用`IEnumerable<Point>`类型的变量来表示一个轮廓曲线。要初始化这个变量,可以使用以下方法:
1. 使用`Point[]`数组初始化
可以使用`Point[]`数组来初始化`IEnumerable<Point>`类型的变量,例如:
```
Point[] points = new Point[] { new Point(0, 0), new Point(50, 0), new Point(50, 50), new Point(0, 50) };
IEnumerable<Point> curve = points;
```
这个例子中,我们使用一个`Point[]`数组来初始化`curve`变量。
2. 使用`List<Point>`列表初始化
可以使用`List<Point>`列表来初始化`IEnumerable<Point>`类型的变量,例如:
```
List<Point> points = new List<Point>();
points.Add(new Point(0, 0));
points.Add(new Point(50, 0));
points.Add(new Point(50, 50));
points.Add(new Point(0, 50));
IEnumerable<Point> curve = points;
```
这个例子中,我们使用一个`List<Point>`列表来初始化`curve`变量。
3. 使用LINQ查询初始化
可以使用LINQ查询来生成一个`IEnumerable<Point>`类型的变量,例如:
```
IEnumerable<Point> curve = Enumerable.Range(0, 100).Select(i => new Point(i, i * i / 100));
```
这个例子中,我们使用一个LINQ查询来生成一个包含100个点的曲线。
不管使用哪种方法,最终生成的`IEnumerable<Point>`类型的变量都可以用于表示一个轮廓曲线,可以传递给OpenCvSharp的函数,例如`Cv2.DrawContours`函数。
OpenCvSharp (List<Point2f> points,转换成 InputArray
要将 List<Point2f> 转换成 InputArray,可以使用 MatOfPoint2f 类。具体的实现代码如下:
```csharp
List<Point2f> points = new List<Point2f>();
// 假设 points 中已经有一些数据
MatOfPoint2f mat = new MatOfPoint2f();
mat.FromList(points);
InputArray inputArray = mat;
```
这样就可以将 List<Point2f> 转换成 InputArray 了。需要注意的是,MatOfPoint2f 的 FromList 方法可以接受 List<Point2f>、Point2f[] 或 Point[] 等类型的输入。