用python在图像处理中实现多条直线拟合并绘制图像和输出倾斜角度
时间: 2024-03-18 17:41:39 浏览: 115
使用python进行线性拟合和曲线拟合
要实现多条直线拟合并绘制图像和输出倾斜角度,可以使用python的OpenCV库。具体步骤如下:
1. 读取图像并转换为灰度图像。
```python
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
2. 使用Hough直线变换检测直线。
```python
lines = cv2.HoughLinesP(gray, 1, np.pi/180, threshold=50, minLineLength=50, maxLineGap=10)
```
其中,`threshold`是阈值,表示检测到的直线中像素点数目的最小值;`minLineLength`和`maxLineGap`分别表示直线的最小长度和最大允许间隔。
3. 对检测到的直线进行拟合,得到斜率和截距。
```python
k_list = []
b_list = []
for line in lines:
x1, y1, x2, y2 = line[0]
k = (y2 - y1) / (x2 - x1)
b = y1 - k * x1
k_list.append(k)
b_list.append(b)
```
4. 绘制拟合的直线。
```python
for i in range(len(k_list)):
k = k_list[i]
b = b_list[i]
x1 = 0
y1 = int(k * x1 + b)
x2 = img.shape[1]
y2 = int(k * x2 + b)
cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
```
其中,`(0, 0, 255)`表示直线的颜色,`2`表示直线的宽度。
5. 计算倾斜角度。
```python
angle_list = []
for k in k_list:
angle = np.arctan(k) * 180 / np.pi
angle_list.append(angle)
```
其中,`np.arctan(k)`计算斜率的反正切值,`* 180 / np.pi`将弧度转换为角度。
完整代码如下:
```python
import cv2
import numpy as np
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
lines = cv2.HoughLinesP(gray, 1, np.pi/180, threshold=50, minLineLength=50, maxLineGap=10)
k_list = []
b_list = []
for line in lines:
x1, y1, x2, y2 = line[0]
k = (y2 - y1) / (x2 - x1)
b = y1 - k * x1
k_list.append(k)
b_list.append(b)
for i in range(len(k_list)):
k = k_list[i]
b = b_list[i]
x1 = 0
y1 = int(k * x1 + b)
x2 = img.shape[1]
y2 = int(k * x2 + b)
cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
angle_list = []
for k in k_list:
angle = np.arctan(k) * 180 / np.pi
angle_list.append(angle)
print(angle_list)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文