opencv python库实现根据红线进行寻迹的程序能实现左右拐弯T型路口已经直线寻迹
以下是使用OpenCV库实现根据红线进行寻迹的Python程序的示例代码:
import cv2
import numpy as np
# 设置视频文件路径或摄像头索引
video_path = 'path_to_video_file' # 替换为实际的视频文件路径,或者使用摄像头输入时设置为0
cap = cv2.VideoCapture(video_path)
# 设置红色阈值范围
lower_red = np.array([0, 100, 100])
upper_red = np.array([10, 255, 255])
lower_red2 = np.array([160, 100, 100])
upper_red2 = np.array([179, 255, 255])
while True:
# 读取视频帧
ret, frame = cap.read()
if not ret:
break
# 转换颜色空间为HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# 对红色进行阈值分割
mask1 = cv2.inRange(hsv, lower_red, upper_red)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask = cv2.bitwise_or(mask1, mask2)
# 进行形态学操作,填充空洞并去除噪声
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
# 寻找轮廓
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 寻找最大轮廓
if len(contours) > 0:
max_contour = max(contours, key=cv2.contourArea)
# 计算最大轮廓的质心
M = cv2.moments(max_contour)
if M["m00"] != 0:
cx = int(M["m10"] / M["m00"])
cy = int(M["m01"] / M["m00"])
# 在图像上绘制质心
cv2.circle(frame, (cx, cy), 5, (0, 255, 0), -1)
# 判断质心位置,进行相应的动作
if cx < frame.shape[1] // 2:
print("向左转")
# 执行向左转的动作
elif cx > frame.shape[1] // 2:
print("向右转")
# 执行向右转的动作
else:
print("直行")
# 执行直行的动作
# 显示图像
cv2.imshow("Frame", frame)
cv2.imshow("Mask", mask)
# 按下q键退出程序
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放视频流和关闭窗口
cap.release()
cv2.destroyAllWindows()
请确保安装了OpenCV库,并将path_to_video_file替换为实际的视频文件路径。如果要使用摄像头输入,请将video_path设置为0。
该程序从视频文件或摄像头读取帧,将帧转换为HSV颜色空间,通过设定的红色阈值范围对图像进行阈值分割,然后进行形态学操作以填充空洞并去除噪声。接下来,程序寻找轮廓,并找到最大轮廓的质心。根据质心的位置,程序判断执行相应的动作(向左转、向右转或直行),并在图像上绘制质心。最后,程序显示图像,并通过按下q键退出程序。
原文地址: https://www.cveoy.top/t/topic/h97c 著作权归作者所有。请勿转载和采集!