工科赛树莓派OpenCV寻迹小车

本文介绍了一个使用树莓派4g8b、减速电机和USB摄像头的寻迹小车项目。通过Python和OpenCV进行图像处理,代码中包含了多种滤波处理方法,适合嵌入式开发新手进行实践。gpio库的安装未在文中详述,认为该步骤简单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

废话不多说直接上可用代码。

材料:减速电机和USB摄像头、树莓派4g8b

代码环境:python、opencv

新手要是没要gpio库的话可自行下载,方法太简单这里不多说。

内涵多种滤波处理可自己尝试使用,代码都在里面。

# coding:utf-8 
import RPi.GPIO as gpio 
import time 
import cv2 
import numpy as np
import os
import serial
 
ser=serial.Serial('/dev/ttyAMA0',115200,timeout=1)
# 定义引脚 
#pwm双通道电机驱动
#电机1
pin1 = 12 
pin2 = 16 
#电机2
pin3 = 18 
pin4 = 22 
#pwm单通道电机驱动
#电机3
Motor_A_PWM = 7
Motor_A_DIR = 11
#电机4
Motor_B_PWM = 32
Motor_B_DIR = 36

# 设置GPIO口为BOARD编号规范 
gpio.setmode(gpio.BOARD) 
# 设置GPIO口为输出 
gpio.setup(pin1, gpio.OUT) 
gpio.setup(pin2, gpio.OUT)  
gpio.setup(pin3, gpio.OUT) 
gpio.setup(pin4, gpio.OUT) 
gpio.setup(Motor_A_PWM, gpio.OUT) 
gpio.setup(Motor_B_PWM, gpio.OUT) 
gpio.setup(Motor_A_DIR, gpio.OUT) 
gpio.setup(Motor_B_DIR, gpio.OUT) 
# 设置PWM波,频率为500Hz 
pwm1 = gpio.PWM(pin1, 500) 
pwm2 = gpio.PWM(pin2, 500) 
pwm3 = gpio.PWM(pin3, 500) 
pwm4 = gpio.PWM(pin4, 500) 
pwm5 = gpio.PWM(Motor_A_PWM, 500) 
pwm6 = gpio.PWM(Motor_B_PWM, 500) 
# pwm波控制初始化 
pwm1.start(0) 
pwm2.start(0) 
pwm3.start(0) 
pwm4.start(0) 
pwm5.start(0) 
pwm6.start(0) 
#电机34方向引脚初
gpio.output(Motor_A_DIR, gpio.LOW)
gpio.output(Motor_B_DIR, gpio.LOW)
# center定义 
center = 320

def add_salt_pepper_noise(image):
    h, w = image.shape[:2]
    nums = 10000
    rows = np.random.randint(0, h, nums, dtype=np.int)
    cols = np.random.randint(0, w, nums, dtype=np.int)
    for i in range(nums):
        if i % 2 == 1:
            image[rows[i], cols[i]] = (255, 255, 255)
        else:
            image[rows[i], cols[i]] = (0, 0, 0)
    return image


def gaussian_noise(image):
    noise = np.zeros(image.shape, image.dtype)
    m = (15, 15, 15)
    s = (30, 30, 30)
    cv2.randn(noise, m, s)
    dst0 = cv2.add(image, noise)
    cv2.namedWindow("gaussian noise",0)
    cv2.resizeWindow("gaussian noise",400,400)
    cv2.imshow("gaussian noise", dst0)
    return dst
# 打开摄像头,图
要使用OpenCV控制树莓派摄像头进行红线循迹,您可以遵循以下步骤: 1. 初始化摄像头:与前面所述相同,使用`cv2.VideoCapture()`函数初始化树莓派摄像头对象。 ```python import cv2 cap = cv2.VideoCapture(0) ``` 2. 循迹红线:使用图像处理技术来识别红线。您可以使用HSV色彩空间将图像转换为HSV格式,并根据红色的HSV范围过滤图像。 ```python # 读取摄像头帧 ret, frame = cap.read() # 将图像转换为HSV色彩空间 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 定义红色范围 lower_red = np.array([0, 100, 100]) upper_red = np.array([10, 255, 255]) # 根据红色范围进行过滤 mask = cv2.inRange(hsv, lower_red, upper_red) ``` 3. 提取红线轮廓:使用`cv2.findContours()`函数找到红线的轮廓。 ```python # 找到红线轮廓 contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ``` 4. 过滤轮廓:根据轮廓的面积和形状进行过滤,以确保仅保留红线的轮廓。 ```python # 过滤轮廓 for contour in contours: area = cv2.contourArea(contour) if area > min_area: # 设置最小面积阈值来过滤掉噪声 # 进一步处理和绘制红线轮廓 ... ``` 5. 绘制红线轮廓:使用`cv2.drawContours()`函数将红线轮廓绘制在原始图像上。 ```python # 绘制红线轮廓 cv2.drawContours(frame, contours, -1, (0, 0, 255), 2) ``` 6. 显示结果:使用`cv2.imshow()`函数显示处理后的图像,并使用`cv2.waitKey()`函数等待用户按下某个键来退出程序。 ```python # 显示结果图像 cv2.imshow('Frame', frame) # 检测按键 key = cv2.waitKey(1) & 0xFF if key == ord('q'): # 按下 'q' 键退出循环 break ``` 这只是一个基本的框架,具体的实现取决于您的具体需求和图像处理算法。您可以根据需要进行调整和优化。同时,您还可以参考OpenCV官方文档和示例代码来获得更多详细信息。祝您成功实现红线循迹功能!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值