python opencv 将图像边缘点打印出来,将这些点组成一个数组,连续五个点拟合成一个线段,计算每个线段的斜率
时间: 2024-05-12 09:13:46 浏览: 237
可以使用Canny算法提取图像边缘,然后使用cv2.findContours函数找到边缘的轮廓,最后使用numpy.polyfit函数对每个轮廓上的点进行拟合,得到斜率。
以下是示例代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 提取边缘
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
# 找到轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 遍历每个轮廓
for contour in contours:
# 将轮廓上的点组成数组
points = np.squeeze(contour)
# 对连续五个点进行拟合
for i in range(len(points) - 4):
x = points[i:i+5, 0]
y = points[i:i+5, 1]
# 拟合直线
coeffs = np.polyfit(x, y, 1)
# 计算斜率
slope = coeffs[0]
print(slope)
```
需要注意的是,上述代码假设每个轮廓都是封闭的,因此轮廓上的最后五个点会和最开始的五个点拟合成同一条线段。如果轮廓是非封闭的,需要根据实际情况修改代码。
阅读全文