opencvsharp提取图像 拐点坐标
时间: 2023-09-21 20:07:06 浏览: 131
要提取图像拐点的坐标,可以使用OpenCVSharp中的边缘检测函数,如Canny或Sobel。以下是一个示例代码,用于检测图像中的拐点并将其坐标保存在一个列表中。
```csharp
using (var src = new Mat("image.jpg", ImreadModes.Color))
{
var gray = new Mat();
var canny = new Mat();
var lines = new Mat();
Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);
Cv2.Canny(gray, canny, 50, 200);
Cv2.HoughLines(canny, lines, 1, Math.PI / 180, 150, 0, 0);
var points = new List<Point>();
for (int i = 0; i < lines.Rows; i++)
{
var rho = lines.At<double>(i, 0);
var theta = lines.At<double>(i, 1);
var a = Math.Cos(theta);
var b = Math.Sin(theta);
var x0 = a * rho;
var y0 = b * rho;
var pt1 = new Point(Math.Round(x0 + 1000 * (-b)), Math.Round(y0 + 1000 * (a)));
var pt2 = new Point(Math.Round(x0 - 1000 * (-b)), Math.Round(y0 - 1000 * (a)));
var angle = Math.Atan2(pt2.Y - pt1.Y, pt2.X - pt1.X) * 180.0 / Math.PI;
if (angle > 80 && angle < 100)
{
points.Add(new Point((pt1.X + pt2.X) / 2, (pt1.Y + pt2.Y) / 2));
}
}
}
```
这段代码首先将图像转换为灰度图像,并使用Canny函数检测边缘。然后使用霍夫变换检测直线,并计算每条直线的角度。最后,检查角度是否接近90度,并将直线的中心点添加到列表中。在这个例子中,我们假设拐点的角度在80到100度之间。
阅读全文