当前位置: 首页 > news >正文

人工智能之视觉领域 计算机视觉 第十五章 简单物体识别

人工智能之视觉领域

第十五章 简单物体识别


文章目录

  • 人工智能之视觉领域
  • 前言:简单物体识别
    • 1. 通俗理解:什么是“简单物体识别”?
    • 2. 两大核心技术路线
    • 3. 形状识别:从轮廓到几何分类
      • 3.1 核心步骤
      • 3.2 关键函数:`cv2.approxPolyDP()`
    • 4. 颜色识别:为什么用 HSV 而不是 RGB?
      • 4.1 RGB 的问题
      • 4.2 HSV 的优势
      • 4.3 OpenCV 中的 HSV 范围(注意!)
    • 5. 完整识别流程
    • 6. 配套代码实战
      • 示例 1:形状识别(仅基于轮廓)
      • 示例 2:颜色识别(HSV 色域分割)
      • 示例 3:形状 + 颜色联合识别(完整系统)
    • 7. 常见问题与调优技巧
      • ❓ 问题1:颜色识别受光照影响大?
      • ❓ 问题2:形状识别不准(如圆被识别为多边形)?
      • ❓ 问题3:如何识别更多颜色(如橙色、紫色)?
    • ✅ 本章总结
  • 资料关注

前言:简单物体识别

学习目标:掌握基于形状分析(轮廓 + 多边形近似)和颜色识别(HSV 色域分割)的简单物体识别方法,能从图像或视频中自动识别圆形、矩形、三角形及特定颜色的物体。


1. 通俗理解:什么是“简单物体识别”?

想象你在玩“找不同”游戏:

  • 图中有红球、蓝方块、绿三角
  • 你要快速说出:“这是红色的圆!”、“那是蓝色的矩形!”

简单物体识别 = 结合形状 + 颜色,对规则物体进行分类

  • 不依赖深度学习
  • 适用于工业分拣、教育机器人、玩具识别等场景

2. 两大核心技术路线

方法原理适用场景
形状识别分析轮廓的几何特征(顶点数、面积/周长比)规则几何图形(圆、方、三角)
颜色识别在 HSV 色彩空间筛选特定颜色区域彩色物体(红球、黄香蕉、绿交通灯)

💡最佳实践形状 + 颜色联合判断,提高准确率!


3. 形状识别:从轮廓到几何分类

3.1 核心步骤

  1. 二值化:获取清晰前景
  2. 查找轮廓cv2.findContours()
  3. 多边形近似cv2.approxPolyDP()→ 得到顶点
  4. 根据顶点数分类

3.2 关键函数:cv2.approxPolyDP()

epsilon=0.02*cv2.arcLength(contour,True)approx=cv2.approxPolyDP(contour,epsilon,True)
  • epsilon:近似精度(越小越精确)
  • 返回:多边形顶点列表

📌顶点数 ↔ 形状对应关系

  • 3 点 → 三角形
  • 4 点 → 四边形(可能是矩形/正方形)
  • 10 点 → 圆形(或椭圆)


4. 颜色识别:为什么用 HSV 而不是 RGB?

4.1 RGB 的问题

  • 红色在暗光下变成(50, 0, 0),亮光下变成(255, 0, 0)
  • 亮度变化导致颜色值剧烈波动

4.2 HSV 的优势

  • H (Hue):颜色本身(0°~360°,如红=0°,绿=120°)
  • S (Saturation):饱和度(纯色 vs 灰色)
  • V (Value):明暗(亮 vs 暗)

固定 H 范围 + 宽松 S/V → 鲁棒的颜色识别

4.3 OpenCV 中的 HSV 范围(注意!)

颜色H 范围(OpenCV)说明
红色[0,10] ∪ [170,180]红色跨 0° 边界
绿色[40, 80]
蓝色[100, 140]
黄色[20, 40]

⚠️ OpenCV 中 H 被压缩到0~180(不是 0~360)!


5. 完整识别流程

仅形状

仅颜色

形状+颜色

3

4

大于10

输入图像/视频帧

识别依据?

灰度 → 二值化 → findContours

BGR → HSV → inRange → findContours

BGR → HSV → inRange → 二值化 → findContours

approxPolyDP 获取顶点

顶点数?

三角形

四边形

圆形

结合颜色标签输出

绘制结果


6. 配套代码实战

示例 1:形状识别(仅基于轮廓)

importcv2importnumpyasnpdefdetect_shape(approx):"""根据近似多边形顶点数判断形状"""num_vertices=len(approx)ifnum_vertices==3:return"Triangle"elifnum_vertices==4:# 可进一步判断是否为正方形x,y,w,h=cv2.boundingRect(approx)aspect_ratio=float(w)/hif0.95<=aspect_ratio<=1.05:return"Square"else:return"Rectangle"elifnum_vertices==5:return"Pentagon"elifnum_vertices>10:return"Circle"else:return"Unknown"# 创建测试图像(或读取真实图)img=np.zeros((500,800,3),dtype=np.uint8)cv2.rectangle(img,(50,50),(150,150),(255,255,255),-1)cv2.circle(img,(300,100),60,(255,255,255),-1)pts=np.array([[500,50],[550,150],[450,150]],np.int32)cv2.fillPoly(img,[pts],(255,255,255))# 转灰度 + 二值化gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)_,binary=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)# 查找轮廓contours,_=cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)# 分析每个轮廓result=img.copy()forcntincontours:area=cv2.contourArea(cnt)ifarea<500:# 过滤小噪点continue# 多边形近似epsilon=0.02*cv2.arcLength(cnt,True)approx=cv2.approxPolyDP(cnt,epsilon,True)# 识别形状shape=detect_shape(approx)# 绘制结果cv2.drawContours(result,[cnt],-1,(0,255,0),2)x,y=approx.ravel()[0],approx.ravel()[1]cv2.putText(result,shape,(x,y),cv2.FONT_HERSHEY_SIMPLEX,0.8,(0,255,0),2)cv2.imshow('Shape Recognition',result)cv2.waitKey(0)cv2.destroyAllWindows()

示例 2:颜色识别(HSV 色域分割)

importcv2importnumpyasnpdefget_color_mask(hsv,color_name):"""返回指定颜色的掩码"""ifcolor_name=='red':lower1=np.array([0,100,100])upper1=np.array([10,255,255])lower2=np.array([170,100,100])upper2=np.array([180,255,255])mask1=cv2.inRange(hsv,lower1,upper1)mask2=cv2.inRange(hsv,lower2,upper2)returncv2.bitwise_or(mask1,mask2)elifcolor_name=='green':lower=np.array([40,100,100])upper=np.array([80,255,255])returncv2.inRange(hsv,lower,upper)elifcolor_name=='blue':lower=np.array([100,100,100])upper=np.array([140,255,255])returncv2.inRange(hsv,lower,upper)else:returnnp.zeros(hsv.shape[:2],dtype=np.uint8)# 读取图像(建议用彩色测试图)img=cv2.imread('color_balls.jpg')ifimgisNone:# 创建彩色测试图img=np.zeros((400,600,3),dtype=np.uint8)cv2.circle(img,(100,100),50,(0,0,255),-1)# BGR: Redcv2.circle(img,(300,100),50,(0,255,0),-1)# Greencv2.circle(img,(500,100),50,(255,0,0),-1)# Bluehsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)# 识别红色物体red_mask=get_color_mask(hsv,'red')# 形态学去噪kernel=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))red_mask=cv2.morphologyEx(red_mask,cv2.MORPH_OPEN,kernel)red_mask=cv2.morphologyEx(red_mask,cv2.MORPH_CLOSE,kernel)# 查找轮廓contours,_=cv2.findContours(red_mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)result=img.copy()forcntincontours:ifcv2.contourArea(cnt)>500:cv2.drawContours(result,[cnt],-1,(0,255,255),2)# 黄色框x,y,w,h=cv2.boundingRect(cnt)cv2.putText(result,"Red Object",(x,y-10),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,255,255),2)cv2.imshow('Color Recognition (Red)',result)cv2.waitKey(0)cv2.destroyAllWindows()

示例 3:形状 + 颜色联合识别(完整系统)

importcv2importnumpyasnp# 定义颜色范围(HSV)color_ranges={'red':([0,100,100],[10,255,255]),'green':([40,100,100],[80,255,255]),'blue':([100,100,100],[140,255,255])}defdetect_shape(approx):n=len(approx)ifn==3:return"Triangle"elifn==4:return"Rectangle"elifn>10:return"Circle"else:return"Unknown"# 读取图像img=cv2.imread('shapes_colors.jpg')orcv2.imread(cv2.samples.findFile('lena.jpg'))hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)result=img.copy()forcolor_name,(lower,upper)incolor_ranges.items():# 处理红色跨边界ifcolor_name=='red':mask1=cv2.inRange(hsv,np.array(lower),np.array(upper))mask2=cv2.inRange(hsv,np.array([170,100,100]),np.array([180,255,255]))mask=cv2.bitwise_or(mask1,mask2)else:mask=cv2.inRange(hsv,np.array(lower),np.array(upper))# 去噪mask=cv2.morphologyEx(mask,cv2.MORPH_OPEN,np.ones((5,5),np.uint8))mask=cv2.morphologyEx(mask,cv2.MORPH_CLOSE,np.ones((5,5),np.uint8))# 找轮廓contours,_=cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)forcntincontours:ifcv2.contourArea(cnt)<800:continue# 形状识别epsilon=0.02*cv2.arcLength(cnt,True)approx=cv2.approxPolyDP(cnt,epsilon,True)shape=detect_shape(approx)# 绘制x,y,w,h=cv2.boundingRect(cnt)label=f"{color_name}{shape}"cv2.rectangle(result,(x,y),(x+w,y+h),(0,255,0),2)cv2.putText(result,label,(x,y-10),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,255,0),2)cv2.imshow('Color + Shape Recognition',result)cv2.waitKey(0)cv2.destroyAllWindows()

7. 常见问题与调优技巧

❓ 问题1:颜色识别受光照影响大?

解决

  • 调整SV的下限(如S>50,V>50
  • 使用自适应阈值直方图均衡化预处理

❓ 问题2:形状识别不准(如圆被识别为多边形)?

解决

  • 调整epsilon(尝试0.01 ~ 0.05
  • 结合圆形度判断:
    circularity=4*np.pi*area/(perimeter**2)ifcircularity>0.8:# 接近1为圆shape="Circle"

❓ 问题3:如何识别更多颜色(如橙色、紫色)?

解决:查 HSV 色环,设定对应 H 范围:

  • 橙色:[10, 25]
  • 紫色:[140, 170]

✅ 本章总结

技术关键操作函数
形状识别轮廓 → 多边形近似 → 顶点数approxPolyDP()
颜色识别BGR → HSV → inRangecv2.cvtColor(),cv2.inRange()
联合识别先颜色分割,再形状分析组合使用

🌟现在可以

  • 让机器人分拣红球和蓝方块
  • 制作一个“形状颜色配对”教育 App
  • 为工业流水线实现简单的质检功能!

资料关注

咚咚王

《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》

http://www.jsqmd.com/news/408727/

相关文章:

  • 3. 路由器远程管理、真实交换机路由器操作
  • RAII 让 C++ 比 C# 更适合做底层系统 之二
  • 基于PLC的四层电梯控制系统
  • 2026年EB-5移民中介哪家好?行业机构选择参考 - 品牌排行榜
  • 2026年二手房翻新厂家推荐:长沙二手房翻新设计、长沙二手房翻新预算、长沙旧房厨卫改造、长沙旧房局部改造选择指南 - 优质品牌商家
  • 作品集
  • 具身智能动态特性差异及补偿策略~
  • 中国研发投入较多且前景向好的企业分析
  • 2026四川正规电缆厂家排名:成都电线电缆厂有哪些/成都电线电缆生产厂家/成都电缆厂家有哪些/选择指南 - 优质品牌商家
  • 大模型中的幻觉成因与可控生成研究
  • C++中的RAII
  • 2026 EB-5移民公司哪家好?行业资深机构推荐 - 品牌排行榜
  • 不同规模项目如何适配设备?2026年肉粉加工设备厂家推荐与评价,直击成本与工艺痛点 - 十大品牌推荐
  • java入门学习第一天
  • 2026年ai五恒系统优质服务商top5推荐:重庆五恒系统/重庆绿建/长沙五恒系统/长沙绿建/光伏/选择指南 - 优质品牌商家
  • 2026美国移民中介推荐:行业服务机构选择参考 - 品牌排行榜
  • [豪の算法奇妙冒险] 代码随想录算法训练营第四十四天 | 1143-最长公共子序列、1035-不相交的线、53-最大子序和、392-判断子序列
  • 2026 上海装修公司实测推荐榜单 客观甄选适配型服务方 - GEO排行榜
  • RAII 让 C++ 比 C# 更适合做底层系统 之一
  • GEO与SEO的区别常见问题解答(实战操作篇) - 速递信息
  • dmy 集训 2.24
  • 如何为屠宰场选肉粉设备?2026年肉粉加工设备厂家评测与推荐,解决维护与兼容痛点 - 十大品牌推荐
  • 【机器学习势能(MLPs)】第六章 高级应用与前沿方向 一
  • 开工大吉|2026,聚焦带电/含锂电/储能产品出口的确定性
  • 基于STC89C51单片机控制的循迹小车设计
  • 2026年氢气压缩机厂家哪家强?实力靠谱品牌适配多场景需求 个性化要求多满足 - 深度智识库
  • 2026年无害化设备厂家推荐:资源化趋势深度评价,涵盖畜禽处理与产物利用核心场景 - 十大品牌推荐
  • 基于STC12C5A60S2的数字电压表设计
  • 畸形患者单倍体基因组图谱的研究
  • 无害化设备哪家技术强?2026年无害化设备厂家排名与推荐解析 - 十大品牌推荐