计算机视觉--Opencv(郁金香图像轮廓提取与多边形逼近)
本次项目的核心目标有两个一是从郁金香图像中精准提取出整束花的外部原始轮廓排除图像中的背景杂质与无关干扰二是通过多边形逼近算法对原始轮廓进行简化得到平滑的近似轮廓同时保留郁金香的核心形状特征。代码如下1. 读取图像并预处理 img cv2.imread(rC:\Users\LEGION\Desktop\fb312a897160f2c9036096f52dbdecf6.png) # 转换为灰度图像 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化处理针对白色背景郁金香阈值240提升轮廓提取精度 _, thresh cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY_INV) # 2. 提取外部轮廓OpenCV 3.x专属返回3个值下划线忽略无用的处理后图像 _, contours, hierarchy cv2.findContours( thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE ) if len(contours) 0: raise ValueError(未检测到图像轮廓请调整二值化阈值或检查图像质量) # 选取面积最大的轮廓确保是整束花的外部轮廓排除杂质小轮廓 target_contour max(contours, keycv2.contourArea) # 3. 计算近似轮廓ε周长×0.005符合题目要求 contour_perimeter cv2.arcLength(target_contour, closedTrue) epsilon 0.005 * contour_perimeter approx_contour cv2.approxPolyDP(target_contour, epsilon, closedTrue) # 4. 核心创建两个独立图像副本分别绘制单一轮廓避免叠加实现分开输出 # 副本1仅绘制红色原始外部轮廓 img_red_original img.copy() cv2.drawContours( img_red_original, [target_contour], 0, (0, 0, 255), # OpenCV BGR格式红色 2 # 线宽 ) # 副本2仅绘制绿色近似轮廓 img_green_approx img.copy() cv2.drawContours( img_green_approx, [approx_contour], 0, (0, 255, 0), # OpenCV BGR格式绿色 2 # 线宽 ) # 5. 分开显示两个独立窗口展示结果可视化查看 # 窗口1红色原始轮廓 cv2.namedWindow(Result 1: Red Original Contour, cv2.WINDOW_NORMAL) cv2.imshow(Result 1: Red Original Contour, img_red_original) # 窗口2绿色近似轮廓 cv2.namedWindow(Result 2: Green Approx Contour, cv2.WINDOW_NORMAL) cv2.imshow(Result 2: Green Approx Contour, img_green_approx) # 6. 分开保存两个独立文件持久化存储可长期查看保存在代码同级目录 cv2.imwrite(flower_red_original_contour.png, img_red_original) cv2.imwrite(flower_green_approx_contour.png, img_green_approx) # 打印保存提示 print(分开保存完成文件路径) print(1. 红色原始轮廓flower_red_original_contour.png) print(2. 绿色近似轮廓flower_green_approx_contour.png) # 等待按键输入后关闭所有显示窗口 cv2.waitKey(0) cv2.destroyAllWindows()注释二值化处理二值化处理是将灰度图像转换为只有黑色和白色两种像素值的图像这样能够突出目标物体与背景的边界方便后续轮廓提取。我们使用cv2.threshold()函数进行二值化处理该函数有四个核心参数第一个参数待二值化的灰度图像gray第二个参数阈值240本次实战中郁金香图像的背景是白色像素值接近 255郁金香本身的像素值低于 240因此选择 240 作为阈值能够很好地区分郁金香和背景第三个参数最大值255当像素值超过阈值或低于阈值取决于二值化类型时将其设置为该最大值第四个参数二值化类型cv2.THRESH_BINARY_INV表示反向二值化即像素值低于阈值的设置为 255白色高于阈值的设置为 0黑色。这样处理后郁金香会变成白色背景会变成黑色更符合 OpenCV 轮廓提取的要求。cv2.findContours()函数有三个核心参数第一个参数二值化图像thresh第二个参数轮廓检索模式cv2.RETR_EXTERNAL表示只提取最外层的轮廓忽略内部的子轮廓这正是我们需要的郁金香外部轮廓第三个参数轮廓逼近方法cv2.CHAIN_APPROX_SIMPLE表示压缩轮廓点只保留轮廓的关键点如直线的端点、曲线的拐点能够大幅减少轮廓点的数量节省内存空间。运行结果红色的为原始轮廓绿色的为近似轮廓将两个图像的结果放在成同一张图上代码如下郁金香图像的轮廓提取、轮廓近似多边形逼近- 结果合并在同一张图中 import cv2 # 1. 读取图像并预处理 img cv2.imread(rC:\Users\LEGION\Desktop\fb312a897160f2c9036096f52dbdecf6.png) # 转换为灰度图像 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化处理针对白色背景郁金香阈值240提升轮廓提取精度 _, thresh cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY_INV) # 2. 提取外部轮廓OpenCV 3.x专属返回3个值下划线忽略无用的处理后图像 _, contours, hierarchy cv2.findContours( thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE ) if len(contours) 0: raise ValueError(未检测到图像轮廓请调整二值化阈值或检查图像质量) # 选取面积最大的轮廓确保是整束花的外部轮廓排除杂质小轮廓 target_contour max(contours, keycv2.contourArea) # 3. 计算近似轮廓ε周长×0.005符合题目要求 contour_perimeter cv2.arcLength(target_contour, closedTrue) epsilon 0.005 * contour_perimeter approx_contour cv2.approxPolyDP(target_contour, epsilon, closedTrue) # 4. 核心创建单个图像副本在同一张图上绘制两种轮廓红色原始绿色近似 img_combined img.copy() # 仅创建一个图像副本用于合并两种轮廓 # 先绘制红色原始外部轮廓 cv2.drawContours( img_combined, [target_contour], 0, (0, 0, 255), # OpenCV BGR格式红色 2 # 线宽 ) # 再绘制绿色近似轮廓在同一个副本上叠加绘制 cv2.drawContours( img_combined, [approx_contour], 0, (0, 255, 0), # OpenCV BGR格式绿色 2 # 线宽 ) # 5. 可视化展示单个窗口展示合并结果 cv2.namedWindow(Result: Red Original Contour Green Approx Contour, cv2.WINDOW_NORMAL) cv2.imshow(Result: Red Original Contour Green Approx Contour, img_combined) # 6. 保存结果单个文件保存合并后的图像 cv2.imwrite(flower_combined_contours.png, img_combined) # 打印保存提示 print(合并结果保存完成文件路径) print(合并轮廓图像flower_combined_contours.png) # 等待按键输入后关闭所有显示窗口 cv2.waitKey(0) cv2.destroyAllWindows()轮廓叠加绘制在img_combined上先调用cv2.drawContours()绘制红色原始轮廓再调用一次该函数绘制绿色近似轮廓OpenCV 会自动将两种轮廓叠加在同一张图上红色和绿色对比清晰能直观看到轮廓近似的简化效果。运行结果

相关新闻

Thinkphp和Laravel网红酒店预定系统的设计与实现_ui9bt

Thinkphp和Laravel网红酒店预定系统的设计与实现_ui9bt

目录 Thinkphp和Laravel框架的选择系统功能模块设计数据库设计技术实现细节性能优化与安全用户体验与界面设计测试与部署总结 项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理 Thinkphp和Laravel框架的选择 Thinkphp和Laravel均为流行的PHP框架&a…

2026/7/6 1:28:34 阅读更多 →
自动化与脚本

自动化与脚本

SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式。本文将介绍如何使用SQLAlchemy ORM进行数据库操作。 目录 安装SQLAlchemy 核心概念 连接数据库 定义数据模型 创建数据库表 基本CRUD操作…

2026/7/7 0:31:08 阅读更多 →
C++编译期数学计算

C++编译期数学计算

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。find_if(begin, end, predicate):查找第…

2026/7/3 5:48:40 阅读更多 →

最新新闻

GBase 8a之gcrcman在非原集群上恢复时遇到拓扑结构检查不一致的问题及其解决方案

GBase 8a之gcrcman在非原集群上恢复时遇到拓扑结构检查不一致的问题及其解决方案

问题描述: gcrcman在非原集群上恢复时,会遇到拓扑结构检查与元集群不一致的问题。 问题原因: 原集群和待恢复集群的拓扑结构存在差异,导致无法恢复。 拓扑对比的前提: gcrcman 是按照2个集群的拓扑结构的字符串进行比对…

2026/7/7 0:31:36 阅读更多 →
DocMate实战指南:从零开始构建openEuler项目文档的完整流程

DocMate实战指南:从零开始构建openEuler项目文档的完整流程

DocMate实战指南:从零开始构建openEuler项目文档的完整流程 【免费下载链接】docmate An AI-powered VS Code extension for intelligent document creation in openEuler community. 项目地址: https://gitcode.com/openeuler/docmate 前往项目官网免费下载…

2026/7/7 0:31:36 阅读更多 →
Paperxie 聊毕业论文 AI 写作|学长学姐实测,一步一步写学位论文真的省心

Paperxie 聊毕业论文 AI 写作|学长学姐实测,一步一步写学位论文真的省心

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图毕业论文 - PaperXie智能写作PaperXieAi论文智能生成软件,10分钟生成万字毕业论文、期刊论文、文献综述、PPT,Aigc查重、降重报告、文献资料。只需一个标题,从开…

2026/7/7 0:29:34 阅读更多 →
如何轻松为任何游戏注入自定义插件:终极ASI加载器完整指南

如何轻松为任何游戏注入自定义插件:终极ASI加载器完整指南

如何轻松为任何游戏注入自定义插件:终极ASI加载器完整指南 【免费下载链接】Ultimate-ASI-Loader The Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate-ASI-…

2026/7/7 0:29:34 阅读更多 →
Monorepo 工程化实战:Turborepo + pnpm 的全栈项目组织与构建缓存

Monorepo 工程化实战:Turborepo + pnpm 的全栈项目组织与构建缓存

Monorepo 工程化实战:Turborepo pnpm 的全栈项目组织与构建缓存 一、多仓库协作的效率黑洞:当你维护 5 个 npm 包时,改一行代码要跑几个 CI 全栈项目的常见组织方式是:前端一个仓库,后端一个仓库,共享类型…

2026/7/7 0:25:32 阅读更多 →
MediaCrawler:5分钟上手,一站式采集小红书、抖音、B站等主流平台数据

MediaCrawler:5分钟上手,一站式采集小红书、抖音、B站等主流平台数据

MediaCrawler:5分钟上手,一站式采集小红书、抖音、B站等主流平台数据 【免费下载链接】MediaCrawler-new 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new 你是否在为新媒体数据分析而烦恼?想要批量获取小红书、…

2026/7/7 0:23:31 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻