OpenCvSharp中 已知 OpenCvSharp.Point[]approxPoints找出最左边和最右边的点
时间: 2023-08-22 22:17:16 浏览: 123
如果已知一个Point类型的数组`approxPoints`,想要找出其中最左边和最右边的点,可以使用以下代码:
```
Point[] approxPoints = new Point[] { new Point(1, 2), new Point(3, 4), new Point(5, 6) };
Point leftmostPoint = approxPoints.OrderBy(p => p.X).First();
Point rightmostPoint = approxPoints.OrderByDescending(p => p.X).First();
```
以上代码中,我们使用了Linq的OrderBy()和OrderByDescending()方法来对数组进行排序,然后使用First()方法获取排好序后的数组中的第一个元素,即最左边和最右边的点。
需要注意的是,如果数组中有多个点的X坐标相同,那么这种方法只能找到其中的一个点。如果需要找到所有X坐标相同的点,可以使用Where()方法来进行筛选。
相关问题
OpenCvSharp已知旋转中心、当前点坐标、旋转角度,求旋转后的坐标,编写函数
可以使用OpenCvSharp的库函数来实现这个功能。具体的实现步骤如下:
1. 定义一个函数,接收旋转中心点、当前点坐标、旋转角度作为输入参数,并返回旋转后的坐标。
2. 首先,我们需要将旋转中心点和当前点坐标转换为OpenCvSharp的Point2f类型,这可以通过Point2f的构造函数来实现。
3. 然后,我们需要计算出旋转矩阵,可以使用OpenCvSharp的GetRotationMatrix2D函数来实现。这个函数接收旋转中心点、旋转角度和缩放因子作为输入参数,并返回一个2x3的旋转矩阵。
4. 接下来,我们可以使用OpenCvSharp的Transform函数来对当前点坐标进行旋转变换。这个函数接收旋转矩阵和当前点坐标作为输入参数,并返回旋转后的坐标。
下面是一个示例代码,可以实现以上功能:
```csharp
using OpenCvSharp;
public static Point2f RotatePoint(Point2f center, Point2f point, float angle)
{
// 转换为OpenCvSharp的Point2f类型
Point2f centerPt = new Point2f(center.X, center.Y);
Point2f pointPt = new Point2f(point.X, point.Y);
// 计算旋转矩阵
Mat rotMat = Cv2.GetRotationMatrix2D(centerPt, angle, 1.0);
// 进行旋转变换
Point2f result = Cv2.Transform(pointPt, rotMat);
return result;
}
```
以上代码可以通过调用RotatePoint函数来实现旋转变换,并返回旋转后的坐标。
阅读全文