以下是使用 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 键退出程序。

OpenCV Python 库实现红线寻迹程序:左右拐弯、T型路口和直线

原文地址: http://www.cveoy.top/t/topic/fOAW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录