计算机视觉第八课:形状识别(自动认出 圆形、方形、三角形)

电脑自动看轮廓,告诉你这是圆形、矩形还是三角形

一、代码示例

python 复制代码
import cv2
import numpy as np

# 1. 读取图片
img = cv2.imread("test.jpg")

# 2. 预处理:灰度 + 二值化(形状检测用二值化效果最好)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化:把图片变成纯黑纯白,让形状边缘超级清晰
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 3. 找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 4. 遍历每个轮廓,判断形状(核心!)
for cnt in contours:
    area = cv2.contourArea(cnt)
    if area < 300:  # 过滤小噪点
        continue
        
    # 核心函数:多边形逼近
    # 把轮廓近似成简单的多边形(比如三角形3条边,矩形4条边)
    epsilon = 0.04 * cv2.arcLength(cnt, True)
    approx = cv2.approxPolyDP(cnt, epsilon, True)
    
    # 获取坐标,用来画框和写字
    x, y, w, h = cv2.boundingRect(cnt)
    
    # 判断形状:看逼近出来有几个角!
    sides = len(approx)
    
    if sides == 3:
        shape = "Triangle"  # 3个角 = 三角形
        color = (0,255,255) # 黄色
    elif sides == 4:
        shape = "Rectangle" # 4个角 = 矩形
        color = (0,255,0)   # 绿色
    else:
        shape = "Circle"    # 很多个角 = 圆形
        color = (0,0,255)   # 红色
    
    # 画框 + 写字
    cv2.rectangle(img, (x,y), (x+w,y+h), color, 2)
    cv2.putText(img, shape, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2)

# 显示结果
cv2.imshow("Shape Detection", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

二、代码解析与原理

1. 二值化

python 复制代码
# 二值化:把图片变成纯黑纯白,让形状边缘超级清晰
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

灰度图:0~255,有黑白灰渐变

二值图:只有 0 和 255,纯黑 + 纯白,没有灰色!

python 复制代码
灰度图(0-255)
→ 设定一个阈值(比如127)
→ 大于127 → 变白(255)
→ 小于127 → 变黑(0)

2. 识别形状

python 复制代码
approx = cv2.approxPolyDP(cnt, epsilon, True)

它的作用只有一个:把复杂曲线 → 简化成直线段组成的形状

1)cnt

需要简化的原始轮廓

2)epsilon(最关键!)

简化的 "误差允许范围"

  • 数字越大 → 简化越狠,形状越方
  • 数字越小 → 越接近原来的曲线
python 复制代码
epsilon = 0.04 * cv2.arcLength(cnt, True) #按轮廓周长的 4% 作为允许误差

3)True

表示轮廓是闭合的(有起点有终点,围成一圈)→ 永远写 True!

返回:approx 返回的是:形状的所有 "角点" 坐标(一组点的集合)

比如:(10,20), (50,60), (30,80)

通过:len(approx)可以得到角点个数

三、运行效果

相关推荐
甲维斯1 分钟前
鬼故事 !DeepSeek4.1 比Opus5 GPT5.6还强!
人工智能
xsd202411182 分钟前
Pdf-Inspector开源工具:用Rust实现毫秒级PDF分类、文本提取与Markdown转换
人工智能
Yanjun2i3 分钟前
Agent学习记录五:Pydantic验证
人工智能·python·学习
找方案5 分钟前
AI视频生成对决:Sora vs 可灵 vs Veo,谁能定义未来
人工智能·机器学习·音视频
AI_Auto25 分钟前
架构视角看数字化转型|核心架构:大共享平台+小应用,从按需走向适变
大数据·人工智能·架构·制造
Evand J30 分钟前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
小蒋观天下33 分钟前
社区AI智能摄像头完整选型指南
大数据·人工智能·安全·计算机视觉·语音识别·ai大模型
xsd2024111840 分钟前
雷达点云与海康摄像机数据融合全解析:从标定同步到工程实践的技术指南
人工智能
冬奇Lab41 分钟前
DeepSeek Harness 系列(03):工具系统——给 Agent 装上手
人工智能·deepseek
AI 思录42 分钟前
Prompt 事故档案(八):日常表达被标为“待校准”,AI 的爹味语法从哪里来
大数据·人工智能·算法·prompt·用户体验·ai合规