OpenCV 实战——从手机轮廓到鲜花轮廓:图像边缘检测与轮廓近似全解析

在计算机视觉领域,轮廓检测是图像分析的核心技术之一,广泛应用于物体识别、形状分析、目标分割等场景。本文将从基础到进阶,结合手机、鲜花两类实战案例,系统讲解 OpenCV 中图像边缘处理、轮廓提取、轮廓筛选及近似轮廓拟合的完整流程,帮助大家掌握从原理到落地的核心技巧。

一、核心知识点

在开始写代码之前我们要先明确几个核心概念:

  • 轮廓:图像中连续的、具有相同颜色 / 灰度的点组成的曲线,代表物体的边界。
  • 二值化:将灰度图转换为黑白二值图,是轮廓检测的前置步骤,只有黑白对比才能清晰识别边界。
  • 轮廓近似:通过减少轮廓点的数量,用更少的点拟合出接近原始轮廓的形状,核心算法:Douglas-Peucker 算法。

二、基础项目实战 1:手机轮廓基础检测

2.1 核心目标

实现手机图像的灰度转换、二值化,并提取所有轮廓,完成基础轮廓绘制。

2.2 完整代码与解析

python 复制代码
import cv2

# 1. 读取图像
phone = cv2.imread('phone.png')
# 2. 转换为灰度图
phone_gray = cv2.cvtColor(phone, cv2.COLOR_BGR2GRAY)
cv2.imshow('phone_gray', phone_gray)

# 3. 二值化处理
ret, phone_binary = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)
cv2.imshow('phone_binary', phone_binary)

# 4. 查找轮廓
# RETR_TREE:提取所有轮廓并建立层级关系;CHAIN_APPROX_NONE:保存所有轮廓点
contours = cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[-2]
print(f"检测到的轮廓数量:{len(contours)}")

# 5. 绘制轮廓
image_copy = phone.copy()
cv2.drawContours(image_copy, contours, -1, (0, 255, 0), 2)
cv2.imshow('Contours', image_copy)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.cvtColor:将 BGR 格式的彩色图转为灰度图,减少色彩维度对轮廓检测的干扰;

cv2.threshold:二值化是轮廓检测的关键,阈值 120 需根据图像实际亮度调整;

cv2.findContours:

相关推荐
飞哥数智坊34 分钟前
AI时代,我们到底该学什么、用什么,为什么还没提效?
人工智能
飞哥数智坊1 小时前
GPT 做架构,国内模型写代码:这条 AI 开发路线能跑通吗?
人工智能·ai编程
AI_AGENT_DEV_AI1 小时前
AI 智能体的开发与上线
人工智能
VL——MOESR1 小时前
【具身智能】VLA论文阅读随笔
论文阅读·人工智能·机器学习·具身智能·vla
OCR_133716212751 小时前
从模板匹配到AI泛化识别:文本抽取如何重构护照阅读器落地生态
人工智能·重构
大唐荣华2 小时前
从OpenAI关停Sora看世界模型、AI视频与国内具身智能赛道路线分化
人工智能·openai·sora·内容生成
DevOps老兵2 小时前
AI Infra实战02:GPU监控实战,用DCGM+Prometheus+Grafana看清每一张卡
人工智能·grafana·prometheus·ai infra·gpu监控·dcgm
旧日之血_Hayter2 小时前
Antigravity 工作流的实践记录
人工智能
dozenyaoyida2 小时前
AI与大模型新闻日报 | 2026-09-01
人工智能·ai·大模型·新闻
傲笑风2 小时前
【openvino】tinybert基于openvino服务化部署(四)
人工智能·python·自然语言处理·nlp·bert·openvino