原始图像img_test 经过高斯滤波+cv2.adaptiveThreshold + cv2.bitwise_not 得到图像img_adaptiveThreshold 图像img_adaptiveThreshold 然后通过霍夫变化cv2.HoughLinesP得到直线lines 遍历lines 得到x1, y1, x2, y2 ,然后计算直线的斜率:slope = abs((y2 - y1) / (x2 - x1 + 0.001)) # 防止分母为0 通过直线的斜率筛选出相对水平与相对垂直的线:if slope > 5.5 or slope<0.17: # 如果斜率大于5.5,则认为是垂直线段 帮我用python和opencv示例
时间: 2024-02-21 22:01:50 浏览: 90
(一)OpenCV图像处理基础_12_形态学操作应用_提取水平与水直线
好的,以下是使用Python和OpenCV实现的示例代码:
```python
import cv2
# 读取原始图像
img = cv2.imread('img_test.jpg')
# 高斯模糊
img_blur = cv2.GaussianBlur(img, (3, 3), 0)
# 自适应阈值
img_threshold = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
# 反色
img_threshold = cv2.bitwise_not(img_threshold)
# 霍夫变换
lines = cv2.HoughLinesP(img_threshold, 1, cv2.cv2.PI / 180, 100, minLineLength=100, maxLineGap=10)
# 绘制筛选后的直线
for line in lines:
x1, y1, x2, y2 = line[0]
# 计算直线的斜率
slope = abs((y2 - y1) / (x2 - x1 + 0.001))
# 筛选相对水平和相对垂直的直线
if slope > 5.5 or slope < 0.17:
cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
# 显示结果图像
cv2.imshow('Result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注意,代码中的参数值可能需要根据具体情况进行调整。
阅读全文