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:

相关推荐
禹凕2 小时前
PyTorch——安装(有无 NVIDIA 显卡的完整配置方案)
人工智能·pytorch·python
大龄程序员狗哥8 小时前
第25篇:Q-Learning算法解析——强化学习中的经典“价值”学习(原理解析)
人工智能·学习·算法
陶陶然Yay8 小时前
神经网络常见层Numpy封装参考(5):其他层
人工智能·神经网络·numpy
极客老王说Agent8 小时前
2026实战指南:如何用智能体实现药品不良反应报告的自动录入?
人工智能·ai·chatgpt
imbackneverdie8 小时前
本科毕业论文怎么写?需要用到什么工具?
人工智能·考研·aigc·ai写作·学术·毕业论文·ai工具
lulu12165440788 小时前
Claude Code项目大了响应慢怎么办?Subagents、Agent Teams、Git Worktree、工作流编排四种方案深度解析
java·人工智能·python·ai编程
大橙子打游戏9 小时前
talkcozy像聊微信一样多项目同时开发
人工智能·vibecoding
deephub9 小时前
LangChain 还是 LangGraph?一个是编排一个是工具包
人工智能·langchain·大语言模型·langgraph
OidEncoder9 小时前
编码器分辨率与机械精度的关系
人工智能·算法·机器人·自动化
Championship.23.2410 小时前
Harness工程深度解析:从理论到实践的完整指南
人工智能·harness