-
Notifications
You must be signed in to change notification settings - Fork 11
/
detect.py
65 lines (54 loc) · 1.99 KB
/
detect.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import cv2
import numpy as np
cascade_src = 'cascade/cars.xml'
video_src = 'dataset/cars.mp4'
#video_src = 'dataset/video2.avi'
cap = cv2.VideoCapture(video_src)
car_cascade = cv2.CascadeClassifier(cascade_src)
while True:
ret, frame = cap.read()
if (type(frame) == type(None)):
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cars = car_cascade.detectMultiScale(gray, 1.1, 1)
for (x,y,w,h) in cars:
roi_gray = cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),2) #ROI is region of interest
img_item = "1.png"
cv2.imwrite(img_item, roi_gray)
#lane detection
def canny(frame):
gray=cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)
blur=cv2.GaussianBlur(gray,(5,5),0)
canny=cv2.Canny(blur,50,150)
return canny
def region_of_interest(frame):
height=frame.shape[0]
polygons=np.array([
[(0,height),(500,0),(800,0),(1300,550),(1100,height)]
])
mask=np.zeros_like(frame)
""" cv2.imshow('abc',mask)"""
cv2.fillPoly(mask,polygons,255)
masked_image=cv2.bitwise_and(frame,mask)
return masked_image
def display_lines(frame,lines):
line_image=np.zeros_like(frame)
if lines is not None:
for line in lines:
x1,y1,x2,y2=line.reshape(4)
cv2.line(line_image, (x1, y1), (x2, y2), (0, 255, 0), 3)
return line_image
lane_image=np.copy(frame)
canny=canny(lane_image)
cropped_image=region_of_interest(canny)
lines=cv2.HoughLinesP(cropped_image,2,np.pi/180,100,np.array([]),minLineLength=5,maxLineGap=300)
"""averaged_lines=average_slope_intercept(lane_image,lines)"""
line_image=display_lines(lane_image,lines)
frame=cv2.addWeighted(lane_image,0.8,line_image,1,1)
img_item = "2.png"
cv2.imwrite(img_item, frame)
cv2.imshow('video', frame)
if cv2.waitKey(20) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()