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:

相关推荐
XM_jhxx16 小时前
±0.03mm的精度怎么保证?翌东塑胶用AI赋能质量管控升级
人工智能
阿正的梦工坊16 小时前
深入理解 PyTorch 中的 unsqueeze 操作
人工智能·pytorch·python
秦歌66618 小时前
DeepAgents框架详解和文件后端
人工智能·langchain
测试员周周18 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
霸道流氓气质19 小时前
基于 Milvus Lite 的 Spring AI RAG 向量库实践方案与示例
人工智能·spring·milvus
ar012319 小时前
AR巡检平台:构筑智能巡检新模式的数字化引擎
人工智能·ar
语音之家19 小时前
【预讲会征集】ACL 2026 论文预讲会
人工智能·论文·acl
碳基硅坊19 小时前
电商场景下的商品自动识别与辅助上架
人工智能
熊猫钓鱼>_>19 小时前
强化学习与决策优化:从理论到工程落地的完整指南
人工智能·llm·强化学习·rl·马尔可夫·mdp·决策过程