Per*_*784 0 python opencv image-processing
如何使用 opencv python 从上图中单独检测白线?我可以使用哪种方法?或者是否有任何内置功能可用于此目的?
看来霍夫确实做得很好。我采用此处显示的示例,仅对边缘提取进行了一些小的修改:
加载图像并转换为灰度:
import numpy as np
import cv2
import scipy.ndimage as ndi
img = cv2.imread(path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Run Code Online (Sandbox Code Playgroud)
然后我应用了中值滤波器来消除一些高频边缘/噪声,例如图像中的网络:
smooth = ndi.filters.median_filter(gray, size=2)
Run Code Online (Sandbox Code Playgroud)
然后我应用了一个简单的阈值来提取白线。或者,您可以应用拉普拉斯滤波器来提取边缘,但是,简单的阈值处理将忽略例如网球场后面的水平线:
edges = smooth > 180
Run Code Online (Sandbox Code Playgroud)
然后执行与本例类似的霍夫线变换。
lines = cv2.HoughLines(edges.astype(np.uint8), 0.5, np.pi/180, 120)
for rho,theta in lines[0]:
print(rho, theta)
a = np.cos(theta)
b = np.sin(theta)
x0 = a*rho
y0 = b*rho
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))
cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)
# Show the result
cv2.imshow("Line Detection", img)
Run Code Online (Sandbox Code Playgroud)
您可以调整精度并修改结果。我最终选择了参数0.5和120。总体结果:
| 归档时间: |
|
| 查看次数: |
4312 次 |
| 最近记录: |