丹東做網(wǎng)站哪家好武漢seo排名
車道識別
步驟
- 區(qū)域感興趣
- 高斯模糊
- 圖片灰度化
- 邊緣提取
- 膨脹腐蝕
- 中值濾波
- 霍夫圓環(huán)檢測直線
- 繪制車道
import cv2
import numpy as npdef create_roi_mask(frame):height, width = frame.shape[:2]# 三角形的頂點(diǎn)top_vertex = [int(width / 2 + 30), int(height * 0.5 + 30)]bottom_left = [120, height-50]bottom_right = [width-120, height-50]# 定義三角形的點(diǎn)集triangle = np.array([bottom_left, top_vertex, bottom_right], np.int32)# 創(chuàng)建一個與原幀同樣大小的空白掩模,注意這里只創(chuàng)建了一個單通道的掩模mask = np.zeros((height, width), dtype=np.uint8)# 使用填充多邊形函數(shù)填充三角形區(qū)域cv2.fillPoly(mask, [triangle], [255])return maskdef create_color_mask(frame):# 將BGR圖像轉(zhuǎn)換為HSV顏色空間hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)# 設(shè)置白色和黃色的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]) # 黃色上限# 應(yīng)用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()