CV的应用之一: 是车道检测, 主要的核心算法的Hough直线筛选, 先列出代码, 尔后, 明天(要出个门呐)或后天把原理输出, 完成闭环:
#coding: utf8
import cv2
import numpy as np
##首先检测边缘
img = cv2.imread('lane.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gaus = cv2.GaussianBlur(gray, (5, 5), 0)
lowth = 80
highth = lowth * 3
edges = cv2.Canny(gaus, lowth, highth, apertureSize=3)
cv2.namedWindow("edge",0)
cv2.imshow("edge",edges)
cv2.waitKey(0)
##然后检测直线
height,width=gray.shape
minLineLength = 100
maxLineGap = 30
lines = cv2.HoughLines(edges,1,np.pi/180,200)
print("gray image size=",gray.shape)
print("lines[0]",lines[0])
##1 返回半径大小和角度##
for rho,theta in lines[0]:
a = np.cos(theta) ##x方向偏移
b = np.sin(theta) ##y方向偏移
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))
print("x0=",x0,"x1=",x1,"x2=",x2)
print("y0=",y0,"y1=",y1,"y2=",y2)
cv2.circle(img,(int(x0),int(y0)),4,(255,255,0),2,8,0) ##画出切点
cv2.line(img,(0,0),(x0,y0),(255,0,0),2) ##画出半径
cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2) ##画出直线
cv2.imshow("Edges", img)
cv2.imwrite("HoughLine.jpg",img)
cv2.waitKey(0)
TODO: 代码结束, 别忘了原理输出, 结束闭环.