树莓派5从零开发至脱机脚本运行教程——6.实战篇

树莓派5应用实例------工创视觉

前言

各位小伙伴,大家好。欢迎来到本章学习内容的第六节,实战篇。在上一小节中,我们已经把要使用到的模块进行模块测试,都没有问题,所以本小节我们直接奉上代码,不过代码并不是最终版本的代码(往各位小伙伴理解),因为该教程只是想让小伙伴们掌握开发流程,不过相信小伙伴们在此基础上修改,也可以到达最好的效果,希望对各位小伙伴有所帮助。本人学识较浅,如有讲的不对的地方,还请各位批评指正,谢谢。

下面这个链接是在调整颜色阈值时,可能用到的小工具:

https://www.rapidtables.com/web/color/RGB_Color.html

效果展示

原图

hsv图

二值化图

代码展示

python 复制代码
import cv2
import numpy as np

cv2.namedWindow('img1', cv2.WINDOW_NORMAL)
cv2.resizeWindow('img1', 640, 480)
cv2.namedWindow('img2', cv2.WINDOW_NORMAL)
cv2.resizeWindow('img2', 640, 480)
def find_green_ring(image_path):
   # 读取图像
   img = cv2.imread(image_path)
   if img is None:
       print("无法读取图像")
       return

   # 转换为HSV颜色空间
   hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

   h, s, v = cv2.split(hsv)

   kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
   closedv = cv2.morphologyEx(v, cv2.MORPH_CLOSE, kernel)

   # 定义绿色的HSV范围
   lower_green = np.array([35, 50, 50])
   upper_green = np.array([85, 255, 255])

   # 根据HSV范围创建掩膜
   mask = cv2.inRange(hsv, lower_green, upper_green)

   # 进行形态学闭操作,连接断开的像素点
   kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
   mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
   cv2.imshow('img2', mask)


   # 寻找轮廓
   contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
   cv2.imshow('img1', hsv)


   if len(contours) > 0:
       # 存储所有圆形的相关信息(圆心、半径)
       circles = []
       for contour in contours:
           # 计算最小外接圆
           (x, y), radius = cv2.minEnclosingCircle(contour)
           center = (int(x), int(y))
           radius = int(radius)
           circles.append((center, radius))

       # 找到最大半径的圆
       max_radius = 0
       max_circle = None
       for circle in circles:
           _, radius = circle
           if radius > max_radius:
               max_radius = radius
               max_circle = circle

       if max_circle is not None:
           center, radius = max_circle
           cv2.circle(img, center, radius, (0, 255, 0), 2)

           # 对圆心进行十字架标注
           cross_length = 10
           cv2.line(img, (int(center[0] - cross_length), int(center[1])), (int(center[0] + cross_length), int(center[1])),
                    (0, 0, 255), 4)
           cv2.line(img, (int(center[0]), int(center[1] - cross_length)), (int(center[0]), int(center[1] + cross_length)),
                    (0, 0, 255), 4)

           # 对整个圆进行矩形标注
           top_left = (int(center[0] - radius), int(center[1] - radius))
           bottom_right = (int(center[0] + radius), int(center[1] + radius))
           cv2.rectangle(img, top_left, bottom_right, (255, 0, 0), 4)


   # 缩放图像以减小分辨率
   new_width = 640
   new_height = 480
   img = cv2.resize(img, (new_width, new_height))

   cv2.imshow('Green Ring Detection', img)
   cv2.waitKey(0)
   cv2.destroyAllWindows()


if __name__ == '__main__':
   image_path = 'img4.jpg'  # 替换为实际的图像路径
   find_green_ring(image_path)

结束语

本节教学中,要想识别色环的效果更好,建议可以把二值化的圆环连接起来处理效果更好,感谢各位小伙伴的阅读。

相关推荐
m0_751336391 小时前
突破性进展:超短等离子体脉冲实现单电子量子干涉,为飞行量子比特奠定基础
人工智能·深度学习·量子计算·材料科学·光子器件·光子学·无线电电子
美狐美颜sdk4 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
DeepSeek-大模型系统教程4 小时前
推荐 7 个本周 yyds 的 GitHub 项目。
人工智能·ai·语言模型·大模型·github·ai大模型·大模型学习
郭庆汝4 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
小雷FansUnion6 小时前
深入理解MCP架构:智能服务编排、上下文管理与动态路由实战
人工智能·架构·大模型·mcp
资讯分享周6 小时前
扣子空间PPT生产力升级:AI智能生成与多模态创作新时代
人工智能·powerpoint
叶子爱分享7 小时前
计算机视觉与图像处理的关系
图像处理·人工智能·计算机视觉
鱼摆摆拜拜8 小时前
第 3 章:神经网络如何学习
人工智能·神经网络·学习
一只鹿鹿鹿8 小时前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程
张较瘦_8 小时前
[论文阅读] 人工智能 | 深度学习系统崩溃恢复新方案:DaiFu框架的原位修复技术
论文阅读·人工智能·深度学习