网站建设认知与理解,什么是做学院网站,夸克建站系统源码下载,在北京建网站人工智能之视觉领域 第十五章 简单物体识别 文章目录人工智能之视觉领域前言#xff1a;简单物体识别1. 通俗理解#xff1a;什么是“简单物体识别”#xff1f;2. 两大核心技术路线3. 形状识别#xff1a;从轮廓到几何分类3.1 核心步骤3.2 关键函数#xff1a;cv2.appro…人工智能之视觉领域第十五章 简单物体识别文章目录人工智能之视觉领域前言简单物体识别1. 通俗理解什么是“简单物体识别”2. 两大核心技术路线3. 形状识别从轮廓到几何分类3.1 核心步骤3.2 关键函数cv2.approxPolyDP()4. 颜色识别为什么用 HSV 而不是 RGB4.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 核心步骤二值化获取清晰前景查找轮廓cv2.findContours()多边形近似cv2.approxPolyDP()→ 得到顶点根据顶点数分类3.2 关键函数cv2.approxPolyDP()epsilon0.02*cv2.arcLength(contour,True)approxcv2.approxPolyDP(contour,epsilon,True)epsilon近似精度越小越精确返回多边形顶点列表顶点数 ↔ 形状对应关系3 点 → 三角形4 点 → 四边形可能是矩形/正方形10 点 → 圆形或椭圆4. 颜色识别为什么用 HSV 而不是 RGB4.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~3605. 完整识别流程仅形状仅颜色形状颜色34大于10输入图像/视频帧识别依据?灰度 → 二值化 → findContoursBGR → HSV → inRange → findContoursBGR → HSV → inRange → 二值化 → findContoursapproxPolyDP 获取顶点顶点数?三角形四边形圆形结合颜色标签输出绘制结果6. 配套代码实战示例 1形状识别仅基于轮廓importcv2importnumpyasnpdefdetect_shape(approx):根据近似多边形顶点数判断形状num_verticeslen(approx)ifnum_vertices3:returnTriangleelifnum_vertices4:# 可进一步判断是否为正方形x,y,w,hcv2.boundingRect(approx)aspect_ratiofloat(w)/hif0.95aspect_ratio1.05:returnSquareelse:returnRectangleelifnum_vertices5:returnPentagonelifnum_vertices10:returnCircleelse:returnUnknown# 创建测试图像或读取真实图imgnp.zeros((500,800,3),dtypenp.uint8)cv2.rectangle(img,(50,50),(150,150),(255,255,255),-1)cv2.circle(img,(300,100),60,(255,255,255),-1)ptsnp.array([[500,50],[550,150],[450,150]],np.int32)cv2.fillPoly(img,[pts],(255,255,255))# 转灰度 二值化graycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)_,binarycv2.threshold(gray,127,255,cv2.THRESH_BINARY)# 查找轮廓contours,_cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)# 分析每个轮廓resultimg.copy()forcntincontours:areacv2.contourArea(cnt)ifarea500:# 过滤小噪点continue# 多边形近似epsilon0.02*cv2.arcLength(cnt,True)approxcv2.approxPolyDP(cnt,epsilon,True)# 识别形状shapedetect_shape(approx)# 绘制结果cv2.drawContours(result,[cnt],-1,(0,255,0),2)x,yapprox.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_namered:lower1np.array([0,100,100])upper1np.array([10,255,255])lower2np.array([170,100,100])upper2np.array([180,255,255])mask1cv2.inRange(hsv,lower1,upper1)mask2cv2.inRange(hsv,lower2,upper2)returncv2.bitwise_or(mask1,mask2)elifcolor_namegreen:lowernp.array([40,100,100])uppernp.array([80,255,255])returncv2.inRange(hsv,lower,upper)elifcolor_nameblue:lowernp.array([100,100,100])uppernp.array([140,255,255])returncv2.inRange(hsv,lower,upper)else:returnnp.zeros(hsv.shape[:2],dtypenp.uint8)# 读取图像建议用彩色测试图imgcv2.imread(color_balls.jpg)ifimgisNone:# 创建彩色测试图imgnp.zeros((400,600,3),dtypenp.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)# Bluehsvcv2.cvtColor(img,cv2.COLOR_BGR2HSV)# 识别红色物体red_maskget_color_mask(hsv,red)# 形态学去噪kernelcv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))red_maskcv2.morphologyEx(red_mask,cv2.MORPH_OPEN,kernel)red_maskcv2.morphologyEx(red_mask,cv2.MORPH_CLOSE,kernel)# 查找轮廓contours,_cv2.findContours(red_mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)resultimg.copy()forcntincontours:ifcv2.contourArea(cnt)500:cv2.drawContours(result,[cnt],-1,(0,255,255),2)# 黄色框x,y,w,hcv2.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# 定义颜色范围HSVcolor_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):nlen(approx)ifn3:returnTriangleelifn4:returnRectangleelifn10:returnCircleelse:returnUnknown# 读取图像imgcv2.imread(shapes_colors.jpg)orcv2.imread(cv2.samples.findFile(lena.jpg))hsvcv2.cvtColor(img,cv2.COLOR_BGR2HSV)resultimg.copy()forcolor_name,(lower,upper)incolor_ranges.items():# 处理红色跨边界ifcolor_namered:mask1cv2.inRange(hsv,np.array(lower),np.array(upper))mask2cv2.inRange(hsv,np.array([170,100,100]),np.array([180,255,255]))maskcv2.bitwise_or(mask1,mask2)else:maskcv2.inRange(hsv,np.array(lower),np.array(upper))# 去噪maskcv2.morphologyEx(mask,cv2.MORPH_OPEN,np.ones((5,5),np.uint8))maskcv2.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# 形状识别epsilon0.02*cv2.arcLength(cnt,True)approxcv2.approxPolyDP(cnt,epsilon,True)shapedetect_shape(approx)# 绘制x,y,w,hcv2.boundingRect(cnt)labelf{color_name}{shape}cv2.rectangle(result,(x,y),(xw,yh),(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颜色识别受光照影响大✅解决调整S和V的下限如S50,V50使用自适应阈值或直方图均衡化预处理❓ 问题2形状识别不准如圆被识别为多边形✅解决调整epsilon尝试0.01 ~ 0.05结合圆形度判断circularity4*np.pi*area/(perimeter**2)ifcircularity0.8:# 接近1为圆shapeCircle❓ 问题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)》《深入浅出神经网络与深度学习(迈克尔·尼尔森MichaelNielsen》《自然语言处理综论 第2版》《Natural-Language-Processing-with-PyTorch》《计算机视觉-算法与应用(中文版)》《Learning OpenCV 4》《AIGC智能创作时代》杜雨张孜铭《AIGC原理与实践零基础学大语言模型、扩散模型和多模态模型》《从零构建大语言模型中文版》《实战AI大模型》《AI 3.0》