检测车道线——3.提取感兴趣区域内的颜色识别

 
 1  import matplotlib.pyplot as plt
 2  import matplotlib.image as mpimg
 3  import numpy as np
 4  
 5  # Read in the image
 6  image = mpimg.imread('E:/spyder/a/a/test.jpg')
 7  
 8  # Grab the x and y sizes and make two copies of the image
 9  # With one copy we'll extract only the pixels that meet our selection,
10  # then we'll paint those pixels red in the original image to see our selection 
11  # overlaid on the original.
12  ysize = image.shape[0]
13  xsize = image.shape[1]
14  color_select= np.copy(image)
15  line_image = np.copy(image)
16  
17  # Define our color criteria
18  red_threshold = 200
19  green_threshold = 200
20  blue_threshold = 200
21  rgb_threshold = [red_threshold, green_threshold, blue_threshold]
22  
23  # Define a triangle region of interest (Note: if you run this code, 
24  # Keep in mind the origin (x=0, y=0) is in the upper left in image processing
25  # you'll find these are not sensible values!!
26  # But you'll get a chance to play with them soon in a quiz ;)
27  left_bottom = [0, 539]
28  right_bottom = [900, 500]
29  apex = [400, 300]
30  
31  fit_left = np.polyfit((left_bottom[0], apex[0]), (left_bottom[1], apex[1]), 1)
32  fit_right = np.polyfit((right_bottom[0], apex[0]), (right_bottom[1], apex[1]), 1)
33  fit_bottom = np.polyfit((left_bottom[0], right_bottom[0]), (left_bottom[1], right_bottom[1]), 1)
34  
35  # Mask pixels below the threshold
36  color_thresholds = (image[:,:,0] < rgb_threshold[0]) | 
37                      (image[:,:,1] < rgb_threshold[1]) | 
38                      (image[:,:,2] < rgb_threshold[2])
39  
40  # Find the region inside the lines
41  XX, YY = np.meshgrid(np.arange(0, xsize), np.arange(0, ysize))
42  region_thresholds = (YY > (XX*fit_left[0] + fit_left[1])) & 
43                      (YY > (XX*fit_right[0] + fit_right[1])) & 
44                      (YY < (XX*fit_bottom[0] + fit_bottom[1]))
45  # Mask color selection
46  color_select[color_thresholds] = [0,0,0]
47  # Find where image is both colored right and in the region
48  line_image[~color_thresholds & region_thresholds] = [255,0,0]
49  
50  # Display our two output images
51  plt.imshow(line_image)

结果如下图所示

 代码27~29改动为

27 left_bottom = [0, 539]
28 right_bottom = [900, 539]
29 apex = [475, 320]

结果如下图

代码51改动为

51 x=[left_bottom[0],right_bottom[0],apex[0],left_bottom[0]]
52 y=[left_bottom[1],right_bottom[1],apex[1],left_bottom[1]]
53 plt.plot(x,y,'b--',lw=4)
54 plt.imshow(line_image)

结果如下图

 

原文地址:https://www.cnblogs.com/minyshi/p/8573658.html