本文主要的目的在于利用树莓派实现对与圆的识别,主要在于笔者在比赛过程中需要向桶中投入物品,那么笔者觉得可以简单的将桶看作一个圆,这样可以简单的实现对目标桶的识别
笔者这篇代码是基于上一篇博客达成的,即利用电脑摄像头实现对圆的识别,从而验证利用opencv库对圆识别的可行性。具体内容及代码参考笔者的另一篇博客
https://blog.csdn.net/2302_76520938/article/details/131800449?spm=1001.2014.3001.5501
以下即为树莓派端的python代码
import cv2
import numpy as np
import picamera
from picamera.array import PiRGBArray
import time
def detect_circles():
# 初始化树莓派相机
camera = picamera.PiCamera()
camera.resolution = (640, 480)
time.sleep(0.1)
raw_capture = PiRGBArray(camera, size=(640, 480))
# 循环捕获图像帧进行处理
for frame in camera.capture_continuous(raw_capture, format="bgr", use_video_port=True):
# 获取原始图像
image = frame.array
# 图像预处理
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 5)
edges = cv2.Canny(gray, 50, 150)
# 圆形检测
circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT,
dp=1, minDist=50, param1=100, param2=30,
minRadius=10, maxRadius=100)
# 绘制检测到的圆形
if circles is not None:
circles = np.round(circles[0, :]).astype("int")
for (x, y, r) in circles:
cv2.circle(image, (x, y), r, (0, 255, 0), 4)
# 显示图像
cv2.imshow("Circles Detection", image)
key = cv2.waitKey(1) & 0xFF
# 清空缓存,准备下一次读取图像
raw_capture.truncate(0)
# 按下 'q' 键退出循环
if key == ord("q"):
break
# 关闭窗口
cv2.destroyAllWindows()
# 执行圆形检测
detect_circles()
读者需要先在树莓派端下载好对应的opencv,numpy,picamera等库,具体如何下载参照其他博主博客即可,已有许多同行大佬介绍过,本人不再赘述
如要像笔者一样实现对特定大小的圆的识别,请关注博主并在博主的主页中寻找对应题目的博客