计算机视觉第五课:给每个物体画 bounding box

电脑自动找到物体,并且给每个物体画一个矩形检测框,和人脸识别、YOLO 检测的逻辑一模一样!

一、先上代码

python 复制代码
import cv2
import numpy as np

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

# 2. 预处理(灰度+模糊+Canny边缘)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)
canny = cv2.Canny(blur, 50, 150)

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

# 4. 遍历每一个轮廓,给每个物体画框(核心!)
for cnt in contours:
    # 过滤掉太小的噪点(面积<100的忽略)
    area = cv2.contourArea(cnt)
    if area > 100:
        # 获取物体的 左上角x,y + 宽度w + 高度h
        x, y, w, h = cv2.boundingRect(cnt)
        
        # 画矩形检测框(绿色,粗细2)
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
        
        # 标上文字:物体
        cv2.putText(img, "Object", (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2)

# 5. 显示结果
cv2.imshow("Canny", canny)
cv2.imshow("最终检测效果", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

二、知识点

  1. 过滤噪点
python 复制代码
area = cv2.contourArea(cnt)
if area > 100:
  • 计算物体面积
  • 太小的直接忽略,避免乱框杂点
  • 你可以改成 200500 更严格
  1. 获取物体坐标(最重要)
python 复制代码
x, y, w, h = cv2.boundingRect(cnt)
  • x, y:物体左上角坐标
  • w:宽度
  • h:高度所有目标检测都是靠这 4 个数字定位!
  1. 画检测框
python 复制代码
cv2.rectangle(img, (x, y), (x+w, y+h), (0,255,0), 2)

这就是人脸识别、车牌识别里框出目标的代码!

三、运行效果

相关推荐
网络研究院1 分钟前
告别野蛮生长!苹果 Apple Music 重拳监管 AI 音乐
人工智能·媒体·音乐·标注·歌曲·执行·监管
xlq223222 分钟前
Ai大模型接入sdk day5
人工智能
Austin_YB5 分钟前
如何用 AI全程托管开发(Agent + SAP MCP 工具链 + 自定义技能)把功能说明书变成系统功能
人工智能
python零基础入门小白13 分钟前
LangGraph智能体实战:如何用Langfuse构建AI运行时全链路可观测系统?
人工智能·学习·ai·chatgpt·程序员·大模型·智能体
xiancai_xianyu13 分钟前
想把数据模型一次建完美再上AI?会一直卡在建模里
开发语言·人工智能·php·数据模型·语义层·本体建模·企业知识网络
2601_9622029816 分钟前
首衡集配用万象,企业竞争力不断增强
大数据·人工智能
小小测试开发17 分钟前
LLM评测:LLM-as-Judge 想当回归门禁,先过偏差校准和双层评分这两关
人工智能·数据挖掘·回归
绿算技术20 分钟前
Solidigm联合绿算技术共同发布《面向 SOHO AI 推理的存储扩展方案》技术白皮书
人工智能·科技·算法·架构·spark
麻瓜code23 分钟前
【Agent】Spring AI RAG 实战:本地向量库 + 云端知识库
java·人工智能·spring
必须会一定会36 分钟前
GPT-6 Astra 官方基准与 AI 编程能力:ARC-AGI-3、Terminal-Bench 4.0、长上下文评测
人工智能·gpt·agi