OpenCV 基于灰度图像识别地图灰赛道并描绘边缘线和中心点
要实现基于灰度处理下识别黄颜色与灰颜色地图的灰赛道,并描绘灰色赛道的赛道边缘线并标出灰色赛道中心位置点,可以按照以下步骤进行:
- 导入必要的库和模块:
import cv2
import numpy as np
- 读取图像并转换为灰度图像:
image = cv2.imread('map.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
- 对灰度图像进行阈值处理,将黄色和灰色区域分割出来:
lower_yellow = np.array([20, 100, 100], dtype=np.uint8)
upper_yellow = np.array([30, 255, 255], dtype=np.uint8)
yellow_mask = cv2.inRange(image_hsv, lower_yellow, upper_yellow)
lower_gray = np.array([0, 0, 50], dtype=np.uint8)
upper_gray = np.array([180, 50, 220], dtype=np.uint8)
gray_mask = cv2.inRange(image_hsv, lower_gray, upper_gray)
- 对黄色和灰色区域进行形态学处理,以去除噪声:
kernel = np.ones((5, 5), np.uint8)
yellow_mask = cv2.morphologyEx(yellow_mask, cv2.MORPH_OPEN, kernel)
gray_mask = cv2.morphologyEx(gray_mask, cv2.MORPH_OPEN, kernel)
- 找出灰色赛道的边缘:
gray_edges = cv2.Canny(gray_mask, 50, 150)
- 找出灰色赛道的中心位置点:
gray_contours, _ = cv2.findContours(gray_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
gray_center_points = []
for contour in gray_contours:
M = cv2.moments(contour)
cX = int(M['m10'] / M['m00'])
cY = int(M['m01'] / M['m00'])
gray_center_points.append((cX, cY))
- 绘制灰色赛道的边缘线和中心位置点:
cv2.drawContours(image, gray_contours, -1, (0, 255, 0), 2)
for point in gray_center_points:
cv2.circle(image, point, 5, (0, 0, 255), -1)
- 显示结果图像:
cv2.imshow('Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
请注意,以上代码仅提供了一个基本的实现思路,具体的参数和调整可能需要根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/o73W 著作权归作者所有。请勿转载和采集!