树莓派+opencv进行摄像头云台颜色追踪

本文介绍了使用树莓派4B、亚博扩展板和USB摄像头搭建摄像头云台颜色追踪系统的经验。通过亚博镜像、OpenCV库,实现了颜色选择、PID控制和线程功能操作,详细讲述了从硬件排查到代码实现的全过程,包括颜色选择按钮配置、云台运动主进程的编写等。最后提到了注意事项,如使用JupyterLab编辑代码、关闭无关进程和重刷镜像等。

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

大家好啊。今天终于把摄像头云台颜色追踪实现了。过来写一下经验。
在这里插入图片描述我用的是亚博的扩展板,usb 摄像头,摄像头云台。树莓派4b(不知道为什么我的3b连接扩展板就报警,蜂鸣器响个不停,后来问了他们家的技术人员说是不是他家的树莓派,也挺无语的,这还分谁家的),后来终于在我的不懈努力下,终于搞明白了,原来是我的树莓派相关引脚出了问题,接触不良。所以报警,所以也提醒一下您,找不到问题时,可能是树莓派引脚出现的问题。

一、镜像

这里我用的是亚博自家的镜像,因为里面有自带的opencv库,至于装opencv的过程,你懂的,很麻烦,以前翻墙装的清华源的,以后有机会再总结吧,考虑到版权问题,这里暂时不能提供链接,有需要的,下面滴滴。树莓派官网的下载地址:http://www.raspberrypi.org/downloads
可在官网上下载最新的Raspbian树莓派系统。

二、代码

import RPi.GPIO as GPIO
import time
#bgr8转jpeg格式
import enum
import cv2

def bgr8_to_jpeg(value, quality=75):
return bytes(cv2.imencode(’.jpg’, value)[1])
#显示摄像头组件
import cv2
import traitlets
import ipywidgets.widgets as widgets
from IPython.display import display
import time

线程功能操作库

import threading
import inspect
import ctypes

image_widget = widgets.Image(format=‘jpeg’, width=300, height=300)
display(image_widget)
#舵机引脚定义
ServoPin = 11 #S2
ServoPinB = 9 #S3
#设置GPIO口为BCM编码方式
GPIO.setmode(GPIO.BCM)
#舵机引脚设置为输出模式
def init():
GPIO.setup(ServoPin, GPIO.OUT)
GPIO.setup(ServoPinB, GPIO.OUT)
#定义一个脉冲函数,用来模拟方式产生pwm值
#时基脉冲为20ms,该脉冲高电平部分在0.5-2.5ms控制0-180度
def servo_pulse(myangleA, myangleB):
pulsewidth = myangleA
GPIO.output(ServoPin, GPIO.HIGH)
time.sleep(pulsewidth/1000000.0)
GPIO.output(ServoPin, GPIO.LOW)
time.sleep(20.0/1000-pulsewidth/1000000.0)

pulsewidthB = myangleB
GPIO.output(ServoPinB, GPIO.HIGH)
time.sleep(pulsewidthB/1000000.0)
GPIO.output(ServoPinB, GPIO.LOW)
time.sleep(20.0/1000-pulsewidthB/1000000.0)

#根据舵机脉冲控制范围为500-2500usec内:
def Servo_control(angle_1, angle_2):
init()
if angle_1 < 500:
angle_1 = 500
elif angle_1 > 2500:
angle_1 = 2500

if angle_2 < 500:
    angle_2 = 500
elif angle_2 > 2500:
    angle_2 = 2500
servo_pulse(angle_1, angle_2)
树莓派4B上使用OpenCV进行颜色识别的代码如下所示: ```python import cv2 import numpy as np # 设置摄像头参数 cap = cv2.VideoCapture(0) cap.set(3, 320) # 设置宽度 cap.set(4, 240) # 设置高度 cap.set(5, 90) # 设置帧率 # 设置颜色范围 lower_color = np.array(\[0, 0, 0\]) # 设置颜色下限 upper_color = np.array(\[255, 255, 255\]) # 设置颜色上限 while True: # 读取摄像头图像 ret, frame = cap.read() # 转换颜色空间 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 根据颜色范围进行二值化 mask = cv2.inRange(hsv, lower_color, upper_color) # 寻找轮廓 contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 绘制轮廓 cv2.drawContours(frame, contours, -1, (0, 0, 255), 3) # 显示图像 cv2.imshow("Color Detection", frame) # 按下q键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头资源 cap.release() # 关闭窗口 cv2.destroyAllWindows() ``` 这段代码使用了OpenCV库来进行颜色识别。首先,通过`cap = cv2.VideoCapture(0)`打开摄像头。然后,设置摄像头的参数,包括宽度、高度和帧率。接下来,设置颜色范围,即要识别的颜色的上下限。在循环中,读取摄像头图像,并将图像转换为HSV颜色空间。然后,根据颜色范围进行二值化,得到颜色的掩膜。接着,寻找轮廓,并将轮廓绘制在原图上。最后,显示图像,并通过按下q键退出循环。最后,释放摄像头资源,并关闭窗口。 请注意,这段代码是一个简单的示例,你可以根据自己的需求进行修改和扩展。 #### 引用[.reference_title] - *1* [颜色识别、轮廓识别-树莓派 Opencv-基于Python学习记录DAY-4](https://blog.csdn.net/qq_52837539/article/details/120420424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [树莓派+opencv进行摄像头云台颜色追踪](https://blog.csdn.net/qq_53188955/article/details/115493119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值