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:

相关推荐
forAllforMe2 小时前
IEC 60601 医疗电气设备安全标准解读
大数据·人工智能
Promise微笑2 小时前
Geo优化:AI时代内容策略的“两大核心+四轮驱动”SOP构建与实证研究
人工智能
2601_949221032 小时前
2026年金融AI投研工具对比测评:五大平台深度解析
大数据·人工智能·金融
自挂东南枝�2 小时前
从人工审校到AI赋能:音视频校对如何保障内容质量
人工智能·音视频
V搜xhliang02462 小时前
目标检测YOLOv9、语义分割、3D点云PCL、SLAM、手眼标定
人工智能·深度学习·目标检测·计算机视觉·3d·知识图谱
檐下翻书1732 小时前
公司组织架构调整工具 在线可视化编辑平台
论文阅读·人工智能·信息可视化·架构·去中心化·流程图
晨之清风2 小时前
Edge/Chrome安装浏览器AI侧边栏插件DeepSider
人工智能·chrome·edge·浏览器插件
IT_陈寒2 小时前
SpringBoot自动配置揭秘:90%开发者不知道的核心原理
前端·人工智能·后端
星轨zb2 小时前
非遗AI对话系统架构升级实战
java·人工智能·redis·后端·系统架构