丹东做网站哪家好推广策略包括哪些内容
车道识别
步骤
- 区域感兴趣
- 高斯模糊
- 图片灰度化
- 边缘提取
- 膨胀腐蚀
- 中值滤波
- 霍夫圆环检测直线
- 绘制车道
import cv2
import numpy as npdef create_roi_mask(frame):height, width = frame.shape[:2]# 三角形的顶点top_vertex = [int(width / 2 + 30), int(height * 0.5 + 30)]bottom_left = [120, height-50]bottom_right = [width-120, height-50]# 定义三角形的点集triangle = np.array([bottom_left, top_vertex, bottom_right], np.int32)# 创建一个与原帧同样大小的空白掩模,注意这里只创建了一个单通道的掩模mask = np.zeros((height, width), dtype=np.uint8)# 使用填充多边形函数填充三角形区域cv2.fillPoly(mask, [triangle], [255])return maskdef create_color_mask(frame):# 将BGR图像转换为HSV颜色空间hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)# 设置白色和黄色的HSV阈值lower_white = np.array([0, 0, 100]) # 白色下限upper_white = np.array([180, 80, 255]) # 白色上限lower_yellow = np.array([20, 100, 100]) # 黄色下限upper_yellow = np.array([30, 255, 255]) # 黄色上限# 应用HSV阈值white_mask = cv2.inRange(hsv, lower_white, upper_white)yellow_mask = cv2.inRange(hsv, lower_yellow, upper_yellow)# 合并两个阈值图像combined_mask = cv2.bitwise_or(white_mask, yellow_mask)return combined_maskif __name__ == '__main__':cap = cv2.VideoCapture('carlines.mp4')while True:ret,frame = cap.read()if ret == False:breakroi_mask = create_roi_mask(frame)# color_mask = create_color_mask(frame)r = cv2.bitwise_and(frame, frame, mask=roi_mask)cv2.imshow('r', r)image = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)image = cv2.GaussianBlur(image, (3, 3), 0)image_Canny = cv2.Canny(image, 70, 100)cv2.imshow('image_Canny', image_Canny)roi = cv2.bitwise_and(image_Canny, image_Canny, mask=roi_mask)cv2.imshow('roi', roi)# image = cv2.bitwise_and(image_Canny, image_Canny, mask=color_mask)# cv2.imshow('color_segmentation', image)img = roikernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 1))kernelY = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 3))img = cv2.dilate(img, kernelX, iterations=2)img = cv2.erode(img, kernelX, iterations=1)img = cv2.erode(img, kernelY, iterations=1)img = cv2.dilate(img, kernelY, iterations=1)# img = cv2.dilate(img, kernelX, iterations=1)cv2.imshow('2', img)image_blur = cv2.medianBlur(img, 15)cv2.imshow('3', img)lines = cv2.HoughLinesP(img, 1, np.pi / 180, 60, minLineLength=20, maxLineGap=10)if lines is not None:for line in lines:for x1, y1, x2, y2 in line:cv2.line(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)cv2.imshow("image_lines", frame)cv2.waitKey(0)cv2.destroyAllWindows()