新闻详情

新闻详情

首页 / 资讯中心 / 详情

基于Python的OpenCV轮廓检测聚类

发布时间:2026/9/27 8:20:28来源:尧图网络
基于Python的OpenCV轮廓检测聚类
简介在计算机视觉领域, 工程师们经常会用到某些特定的“”功能”。因为这些功能的存在, 大家只需编写寥寥几行代码, 就能够检测出轮廓或者对应的对象。不过, 需要注意的是, 通过这种方法检测出来的轮廓, 往往呈现出一种分散的状态。举例来说, 一张内容丰富且包含较多细节的图片, 可能会生成成百上千个轮廓, 但千万不要以为这意味着图片里真的存在那么多独立的对象。有些情况下, 同一个对象会对应多个独立的轮廓线, 所以我们想做的, 就是把这些零散的轮廓给凑到一块儿去。这么一处理呢就能使得一个单独的轮廓, 刚好就代表着那一个对象了。实现思路当我的项目中碰到了这个麻烦的时候, 我花了不少功夫去试着用别的参数或者换其他的函数来看能不能找出轮廓线出来, 可惜试了一遍又一个, 没有一个是管用的。后来, 我又做了不少调查研究工作, 最终在那一个叫的那个论坛上, 还真就让我看到了一篇帖子, 里面说到了什么叫做凝聚聚类这么一回事。不过, 这篇帖子上面并没有把源代码给贴出来供人参考。我也确实还发现了好像有个地方是支持那个聚合聚类的算法的, 但是我最后决定还是别去用它了, 原因有两个方面需要考虑进去嘛:就我个人的感觉而言, 这个功能实际上显得有些过于复杂了。我根本不清楚该如何去输入那些正确的参数, 同时我也一直在怀疑, 关于轮廓检测所得出的数据类型, 到底是不是能够直接适配到这样一个函数里面去使用的状态之中。在具体的版本要求方面, 我必须得要去使用版本号是2.7的那个系统, 还需要用到版本号是3.3.1的某种环境支持, 另外也得把Numpy的库升级到1.11.3这个特定的版本才行。可是目前这种状况下, 它跟我们现有的版本也就是0.20之间完全是对不兼容的, 因为后面提到的那个更高版本的软件环境, 恰恰才是真正能够支持聚类算法运作的那一个版本选项。源代码为了向大家分享我自己编写的这个函数, 我将它进行了开源操作。同时, 我会把相关内容作为要点发布在下面部分。这个特定的版本是用来适配某个环境的。如果你需要在“.7”这个环境当中使用它的话, 那么你只需要进行一个简单的替换动作就可以搞定了。具体来说, 就是要把代码里的“range”这个词给更换掉, 把它替换成空白的内容, 或者说替换为对应的占位符。#!/usr/bin/env python3import osimport cv2import numpydef calculate_contour_distance(contour1, contour2):x1, y1, w1, h1 cv2.boundingRect(contour1)c_x1 x1 w1/2c_y1 y1 h1/2x2, y2, w2, h2 cv2.boundingRect(contour2)c_x2 x2 w2/2c_y2 y2 h2/2return max(abs(c_x1 - c_x2) - (w1 w2)/2, abs(c_y1 - c_y2) - (h1 h2)/2)def merge_contours(contour1, contour2):return numpy.concatenate((contour1, contour2), axis0)def agglomerative_cluster(contours, threshold_distance40.0):current_contours contourswhile len(current_contours) 1:min_distance Nonemin_coordinate Nonefor x in range(len(current_contours)-1):for y in range(x1, len(current_contours)):distance calculate_contour_distance(current_contours[x], current_contours[y])if min_distance is None:min_distance distancemin_coordinate (x, y)elif distance min_distance:min_distance distancemin_coordinate (x, y)if min_distance threshold_distance:index1, index2 min_coordinatecurrent_contours[index1] merge_contours(current_contours[index1], current_contours[index2])del current_contours[index2]else:breakreturn current_contours注意结果如果想要查看集群处理之后的效果, 那么请看下面提供的这两幅图像。第一张图片展示的是在最开始的时候, 一共检测出了12个轮廓。而在进行了聚类操作之后, 这些轮廓的数量就减少了, 具体只剩下4个轮廓了, 这一点可以从第二张图像中看出来。在这两幅图对应的场景中, 其中有两个很小的物体, 它们是因为受到噪声干扰才出现的。这两个小物体并没有与其他的物体合并到一起, 造成这种现象的原因是它们之间的距离太远了, 相比之下, 这个距离是超过了预设的阈值距离的。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

WebGPU 纹理数组(Texture Arrays)在大型地形渲染中的应用 2026/9/27 8:20:22

WebGPU 纹理数组(Texture Arrays)在大型地形渲染中的应用

WebGPU 纹理数组(Texture Arrays)在大型地形渲染中的应用在大型三维开放世界、航天遥感数字地球或复杂地质可视化中,宏大地形表面往往需要混合使用数十种不同的地表材质:草地、岩石、泥土、沙滩、积雪与森林。 在传统的 WebGL 渲染…

阅读更多 →
做网站有什么建议源码下载 2026/9/27 8:20:22

做网站有什么建议源码下载

不会代码也能做站?这份保姆级建站教程给你6条硬核建议 很多老板找我咨询,开口第一句就是:“我想做个网站,但我完全不懂代码,有没有什么好建议?” 别慌,这种焦虑我太熟悉了。以前觉得建站得招个程序员,一个月工资小一万,还得担心他跑路。…

阅读更多 →
使用 Bot Framework Rich Cards 构建富卡片交互机器人:BotUsingCards 示例深度解析 2026/9/27 8:20:03

使用 Bot Framework Rich Cards 构建富卡片交互机器人:BotUsingCards 示例深度解析

示例工程 【免费下载链接】ailab Experience, Learn and Code the latest breakthrough innovations with Microsoft AI 项目地址: https://gitcode.com/gh_mirrors/ai/ailab 点击查看 免费下载 本指南围绕 Microsoft AI Lab 仓库中的 GoogleAssistantConnector/De…

阅读更多 →
端侧模型冷启动优化:利用 mmap 预读机制与按需缺页加载压缩启动耗时 50% 2026/9/27 8:19:57

端侧模型冷启动优化:利用 mmap 预读机制与按需缺页加载压缩启动耗时 50%

端侧模型冷启动优化:利用 mmap 预读机制与按需缺页加载压缩启动耗时 50%在移动端、车机座舱或边缘网关设备上部署端侧 SLM(如 2B~7B 量化模型、语音/视觉多模态模型)时,用户体验的第一道鬼门关就是冷启动耗时(Cold Sta…

阅读更多 →
RAG 交付后的账单防爆门:甲方海量恶意刷检索时的 Token 配额与多级限流实战 2026/9/27 8:19:57

RAG 交付后的账单防爆门:甲方海量恶意刷检索时的 Token 配额与多级限流实战

RAG 交付后的账单防爆门:甲方海量恶意刷检索时的 Token 配额与多级限流实战在私有化或 SaaS 模式的 RAG(检索增强生成)系统交付上线后,很多小厂往往会遭遇一种始料未及的“财务危机”:系统刚上线一周,客户的…

阅读更多 →
MCP Server 跨语言 SDK 封装与统一契约测试平台实战 2026/9/27 8:19:56

MCP Server 跨语言 SDK 封装与统一契约测试平台实战

MCP Server 跨语言 SDK 封装与统一契约测试平台实战随着 Model Context Protocol(MCP) 成为全球多智能体工具接入的事实标准,大型企业内部的技术栈呈现出**“多语言并存、异构系统交织”**的格局: 算法团队主要使用 Python&#x…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉