怎么在网站上做下载,做有网被视频网站有哪些,视频网站如何做微信营销,wordpress自带有用参数今日继续学习树莓派4B 4G#xff1a;#xff08;Raspberry Pi#xff0c;简称RPi或RasPi#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1#xff1a; 今日学习 OpenCv定位物体实时位置#xff0c;代码来源是…今日继续学习树莓派4B 4GRaspberry Pi简称RPi或RasPi 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1 今日学习 OpenCv定位物体实时位置代码来源是创乐博,这里作学习解释
文章提供测试代码讲解整体代码贴出、测试效果图 目录 完整实例代码贴出: 实验过程 获取小球的准确HSV色域 将上一步得到的HSV色域替换在程序中 实验结果截图与视频 网上查阅资料贴出: 完整实例代码贴出: 这个代码实现了圈出指定HSV色彩范围的圆形物体并打印出其质心在视频帧上的坐标 并且有LED相关的亮灭操作用于指示是否检测到目标 # -*- coding: utf-8 -*-from __future__ import print_function # 导入print函数确保在Python 2和Python 3中都能以兼容的方式使用print。
from imutils.video import VideoStream # 从imutils库中导入VideoStream用于从摄像头捕获视频帧。
import imutils # 导入imutils库该库提供了图像和视频处理的实用功能。
import time
import cv2
import os
import RPi.GPIO as GPIO # 导入Raspberry Pi的GPIO库用于控制GPIO引脚。Led 21 # 定义一个变量Led表示连LED的GPIO引脚编号。
GPIO.setwarnings(False) # 关闭GPIO库的警告信息。
GPIO.setmode(GPIO.BCM) # 设置GPIO引脚编号模式为BCMBroadcom SOC channel mode。
GPIO.setup(Led, GPIO.OUT) # 设置GPIO引脚Led为输出模式。# 定义一个函数用于打印对象中心的坐标。
def mapObjectPosition (x, y):print ([INFO] Object Center coordenates at X0 {0} and Y0 {1}.format(x, y))# 打印一条信息表示正在等待摄像头预热。
print([INFO] waiting for camera to warmup...)
vs VideoStream(0).start() # 创建一个VideoStream对象并启动它。0表示使用默认的摄像头。
time.sleep(2.0) # 等待2秒确保摄像头已经预热完成。colorLower (9,135,231) # 定义HSV颜色空间的下限用于颜色过滤。
colorUpper (31,255,255) # 定义HSV颜色空间的上限用于颜色过滤。GPIO.output(Led, GPIO.LOW) # 将Led引脚设置为低电平关闭LED。
ledOn False # 定义一个变量ledOn表示LED是否已打开。while True:frame vs.read() # 从VideoStream中读取一帧图像。 frame imutils.resize(frame, width500) # 调整帧的大小使其宽度为500像素。frame imutils.rotate(frame, angle0) # 旋转帧虽然在这里旋转角度为0所以实际上没有旋转。hsv cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # 将帧从BGR颜色空间转换为HSV颜色空间。mask cv2.inRange(hsv, colorLower, colorUpper)# 使用定义的颜色范围创建一个颜色掩码。mask cv2.erode(mask, None, iterations2) # 对掩码进行腐蚀操作减少噪声。mask cv2.dilate(mask, None, iterations2) # 对掩码进行膨胀操作确保对象区域被完全覆盖# 在掩码上查找轮廓。 cnts cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)cnts cnts[0] if imutils.is_cv2() else cnts[1] # 根据OpenCV的版本2或3/4选择正确的轮廓列表。 center None # 初始化一个变量center用于存储对象的中心坐标。 if len(cnts) 0: # 如果找到了轮廓... c max(cnts, keycv2.contourArea) # 找到面积最大的轮廓。((x, y), radius) cv2.minEnclosingCircle(c) # 找到该轮廓的最小外接圆并获取其圆心和半径。M cv2.moments(c) # 计算轮廓c的矩矩是一组值可以从中推导出对象的形状特征如面积、质心等。 center (int(M[m10] / M[m00]), int(M[m01] / M[m00])) # 使用矩来计算轮廓的质心或称为中心并将其存储在变量center中。 if radius 10: # 如果找到的最小外接圆的半径大于10一个阈值可以根据实际情况调整cv2.circle(frame, (int(x), int(y)), int(radius),(0, 255, 255), 2) # 在原帧上绘制找到的最小外接圆颜色为青色BGR中的(0, 255, 255)线宽为2。cv2.circle(frame, center, 5, (0, 0, 255), -1) # 在原帧上绘制轮廓的质心或中心颜色为红色BGR中的(0, 0, 255)并填充。mapObjectPosition(int(x), int(y)) # 调用之前定义的函数打印对象中心的坐标。 if not ledOn: # 如果LED灯之前没打开ledOn为False则将其打开并将ledOn设置为True。GPIO.output(Led, GPIO.HIGH)ledOn Trueelif ledOn: # 如果没有找到轮廓但LED灯是打开的ledOn为True关闭LED灯并将ledOn设置为False。GPIO.output(Led, GPIO.LOW)ledOn Falsecv2.imshow(Frame, frame) # 使用OpenCV的imshow函数显示处理后的帧。key cv2.waitKey(1) 0xFF # 如果按下的键是Esc键ASCII码为27则退出循环。 if key 27:breakprint(\n [INFO] Exiting Program and cleanup stuff \n) # 打印一条信息表示程序正在退出并进行清理。
GPIO.cleanup() # 清理GPIO设置释放资源。
cv2.destroyAllWindows() # 关闭所有OpenCV打开的窗口。
vs.stop() # 停止VideoStream的捕获。 实验过程 代码中所用的大部分函数已经在之前的几篇文章提到过了就不重复解释了 文章网址如下 树莓派4B_OpenCv学习笔记9:图片的腐蚀与膨胀-CSDN博客 树莓派4B_OpenCv学习笔记12OpenCv颜色追踪_画出轨迹_树莓派opencv颜色识别-CSDN博客树莓派4B_OpenCv学习笔记13OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆-CSDN博客 获取小球的准确HSV色域 因为程序中已经存在了寻找最大轮廓圆的处理因此即使不使用上一节文章的手动调节HSV的处理也没什么大问题但我这里为了检测更为准确专用还是加上了上一节代码的HSV微调操作 文章网址如下 树莓派4B_OpenCv学习笔记13OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆-CSDN博客 拍摄照片获取BGR颜色空间160 75 13 转换为大致的HSV色彩空间 再使用之前的颜色小球追踪程序对HSV进行进一步细节调整 调整前 [97,100,100] [117,255,255] 调整后 [92,189,130] [117,244,200] 将上一步得到的HSV色域替换在程序中 实验结果截图与视频 树莓派4B_OpenCv学习笔记15OpenCv定位物体 网上查阅资料贴出: [树莓派基础]11.树莓派OpenCV定位物体的实时位置_哔哩哔哩_bilibili