当前位置: 首页 > news >正文

实现了两种不同的图像处理和物体检测方法

这段代码实现了两种不同的图像处理和物体检测方法:一种是基于Canny边缘检测与轮廓分析的方法,另一种是使用TensorFlow加载预训练SSD(Single Shot Multibox Detector)模型进行物体检测。

1. Canny边缘检测与轮廓分析:

首先,通过OpenCV进行图像处理,找到矩形物体并进行绘制:

image = cv2.imread('U:/1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 高斯模糊
blurred = cv2.GaussianBlur(gray, (5, 5), 0)# Canny边缘检测
edges = cv2.Canny(blurred, 50, 150)# 查找轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)for contour in contours:# 逼近多边形epsilon = 0.04 * cv2.arcLength(contour, True)approx = cv2.approxPolyDP(contour, epsilon, True)# 如果轮廓有4个点且是矩形if len(approx) == 4:# 计算矩形的长宽比x, y, w, h = cv2.boundingRect(approx)aspect_ratio = float(w) / hif 0.8 < aspect_ratio < 1.2:  # 如果长宽比接近1,表示是矩形# 绘制矩形cv2.drawContours(image, [approx], -1, (0, 255, 0), 2)# 显示结果
cv2.imshow("Detected Rectangles", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 步骤:
    1. 灰度化:通过cv2.cvtColor()将图像转换为灰度图。
    2. 高斯模糊:使用cv2.GaussianBlur()进行模糊处理,减少噪声。
    3. Canny边缘检测:通过cv2.Canny()检测图像中的边缘。
    4. 查找轮廓:使用cv2.findContours()获取图像的外部轮廓。
    5. 轮廓逼近:通过cv2.approxPolyDP()简化轮廓形状,逼近为多边形。
    6. 筛选矩形:通过检测轮廓点数为4的多边形,计算长宽比并判断其是否接近正方形(长宽比介于0.8和1.2之间)。
    7. 绘制矩形:如果符合条件,使用cv2.drawContours()绘制绿色矩形框。

2. SSD模型物体检测:

接下来,使用TensorFlow加载预训练的SSD模型,并在图像上进行物体检测,最后绘制检测框:

# 加载预训练的SSD模型
model = tf.saved_model.load('ssd_mobilenet_v2_coco/saved_model')# 读取图片
img = cv2.imread('image_path')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
input_tensor = tf.convert_to_tensor(img_rgb)
input_tensor = input_tensor[tf.newaxis, ...]  # 扩展维度# 执行推理
model_fn = model.signatures['serving_default']
output_dict = model_fn(input_tensor)# 获取检测结果
boxes = output_dict['detection_boxes'].numpy()[0]  # 边界框
scores = output_dict['detection_scores'].numpy()[0]  # 置信度
classes = output_dict['detection_classes'].numpy()[0]  # 标签# 筛选出矩形
threshold = 0.5
for i in range(len(scores)):if scores[i] > threshold:y1, x1, y2, x2 = boxes[i]x1, y1, x2, y2 = int(x1 * img.shape[1]), int(y1 * img.shape[0]), int(x2 * img.shape[1]), int(y2 * img.shape[0])cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)# 显示图像
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.axis('off')
plt.show()
  • 步骤:
    1. 加载SSD模型:通过tf.saved_model.load()加载一个预训练的SSD模型(ssd_mobilenet_v2_coco)。
    2. 读取图像:使用cv2.imread()加载图像,并将其转换为RGB格式。
    3. 图像处理:将图像转换为TensorFlow的张量格式,并扩展为批处理维度。
    4. 推理过程:通过模型的signatures['serving_default']执行推理,获得检测的边界框、置信度和标签。
    5. 筛选结果:根据置信度(scores)大于设定的阈值(0.5)进行筛选。
    6. 绘制边界框:使用cv2.rectangle()绘制绿色矩形框,将检测到的物体框出。
    7. 显示图像:使用matplotlib.pyplot显示处理后的图像。

总结:

  • Canny边缘检测与轮廓分析:通过对图像边缘进行检测,使用轮廓分析找出矩形,并通过长宽比进一步筛选目标。
  • SSD物体检测:利用TensorFlow预训练的SSD模型进行物体检测,并在图像中绘制检测到的物体框。

这两种方法可以结合使用,在某些应用中,如检测特定形状(矩形)和使用深度学习检测物体时,互为补充。

相关文章:

实现了两种不同的图像处理和物体检测方法

这段代码实现了两种不同的图像处理和物体检测方法&#xff1a;一种是基于Canny边缘检测与轮廓分析的方法&#xff0c;另一种是使用TensorFlow加载预训练SSD&#xff08;Single Shot Multibox Detector&#xff09;模型进行物体检测。 1. Canny边缘检测与轮廓分析&#xff1a; …...

如何在MindMaster思维导图中制作PPT课件?

思维导图是一种利用色彩、图画、线条等图文并茂的形式&#xff0c;来帮助人们增强知识或者事件的记忆。因此&#xff0c;思维导图也被常用于教育领域&#xff0c;比如&#xff1a;教学课件、读书笔记、时间管理等等。那么&#xff0c;在MindMaster免费思维导图软件中&#xff0…...

ORIN NX 16G安装中文输入法

刷机版本为jetpack5.14.刷机之后预装了cuda、cudnn、opencv、tensorrt等&#xff0c;但是发现没有中文输入&#xff0c;所以记录一下安装流程。 jetson NX是arm64架构的&#xff0c;sougoupinyin只支持adm架构的&#xff0c;所以要选择安装Google pinyin 首先打开终端&#x…...

【金融风控项目-07】:业务规则挖掘案例

文章目录 1.规则挖掘简介2 规则挖掘案例2.1 案例背景2.2 规则挖掘流程2.3 特征衍生2.4 训练决策树模型2.5 利用结果划分分组 1.规则挖掘简介 两种常见的风险规避手段&#xff1a; AI模型规则 如何使用规则进行风控 **使用一系列逻辑判断(以往从职人员的经验)**对客户群体进行区…...

退款成功订阅消息点击后提示订单不存在

问题表现&#xff1a; 退款成功发送的小程序订阅消息点击进入后提示订单不存在。 修复方法&#xff1a; 1.打开文件app/services/message/notice/RoutineTemplateListService.php 2.找到方法sendOrderRefundSuccess 3.修改图中红圈内的链接地址 完整方法代码如下 /*** 订…...

实验一 顺序结构程序设计

《大学计算机&#xfe63;C语言版》实验报告 实验名称 实验一 顺序结构程序设计 实验目的 &#xff08;1&#xff09;掌握C语言中常量和变量的概念。 &#xff08;2&#xff09;掌握C语言中常见的数据类型。 &#xff08;3&#xff09;掌握C语言中变量的定义和赋值方法。 …...

Elasticsearch搜索流程及原理详解

Elasticsearch搜索流程及原理详解 1. Elasticsearch概述1.1 简介1.2 核心特性1.3 应用场景2. Elasticsearch搜索流程2.1 搜索请求的发起2.2 查询的执行2.3 结果的聚合与返回3. Elasticsearch原理详解3.1 倒排索引3.2 分布式架构3.3 写入流程3.4 读取流程4. 技术细节与操作流程4…...

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)

芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号) 本期是平台君和您分享的第113期内容 前一段时间,高通公司(Qualcomm)发布安全警告称,提供的60多款芯片潜在严重的“零日漏洞”,芯片安全再一次暴露在大众视野。 那什么是“零日漏洞”?平台君从网上找了一段…...

【gitlab】gitlabrunner部署

1、下载镜像 docker pull gitlab/gitlab-runner:latest 2、启动gitrunner容器 docker run -d --name gitlab-runner --restart always \ -v /root/gitrunner/config:/etc/gitlab-runner \ ///gitlab-runner的配置目录&#xff0c;挂载在宿主机上方便修改,里面有config.…...

Flink监控checkpoint

Flink的web界面提供了一个选项卡来监控作业的检查点。这些统计信息在任务终止后也可用。有四个选项卡可以显示关于检查点的信息:概述(Overview)、历史(History)、摘要(Summary)和配置(Configuration)。下面依次来看这几个选项。 Overview Tab Overview选项卡列出了以…...

Ribbon 入门实战指南

Ribbon 是 Netflix 开发的一个开源项目&#xff0c;用于实现客户端负载均衡功能。它在微服务架构中广泛使用&#xff0c;并且是 Spring Cloud 生态中的重要组成部分。本文将带你从基础入门&#xff0c;逐步掌握如何在 Spring Cloud 项目中使用 Ribbon 实现客户端负载均衡。 1 负…...

uniapp: 微信小程序包体积超过2M的优化方法(主包从2.7M优化到1.5M以内)

一、问题描述 在使用uniapp进行微信小程序开发时&#xff0c;经常会遇到包体积超过2M而无法上传&#xff1a; 二、解决方案 目前关于微信小程序分包大小有以下限制&#xff1a; 整个小程序所有分包大小不超过 30M&#xff08;服务商代开发的小程序不超过 20M&#xff09; 单个…...

【百日算法计划】:每日一题,见证成长(026)

题目 给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外)&#xff0c;计算其结果。 表达式仅包含非负整数&#xff0c;&#xff0c; - &#xff0c;&#xff0c;/ 四种运算符和空格 。 整数除法仅保留整数部分。 * * 示例 1: 输入: “32X2” 输出: 7 import…...

【大模型】prompt实践总结

文章目录 怎么才算是好的prompt设计准则基本原则精炼原则(奥卡姆剃刀准则)具体原则真实操作技巧指定角色增加fewshots列表化代码化强调需求真实迭代大模型优化情形任务的定义和评估标准似乎可以再明确一下出现了一些之前没有考虑过的特殊情况,可以重新组织语言优化Prompt来处…...

在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】

在Qt&#xff08;以及C&#xff09;中&#xff0c;& 和 * 是两个至关重要的符号&#xff0c;它们用于处理引用和指针。我们将逐个解释这两个符号&#xff0c;并提供简单示例来说明它们的用法。 1. 引用&#xff08;&&#xff09; 定义: 引用是一种别名&#xff0c;它不…...

本地部署Apache Answer搭建高效的知识型社区并一键发布到公网流程

文章目录 前言1. 本地安装Docker2. 本地部署Apache Answer2.1 设置语言选择简体中文2.2 配置数据库2.3 创建配置文件2.4 填写基本信息 3. 如何使用Apache Answer3.1 后台管理3.2 提问与回答3.3 查看主页回答情况 4. 公网远程访问本地 Apache Answer4.1 内网穿透工具安装4.2 创建…...

Ubuntu常见命令

关于export LD_LIBRARY_PATHcmake默认地址CMakelists.txt知识扩充/home&#xff1a;挂载新磁盘到 /home 子目录 关于export LD_LIBRARY_PATH 程序运行时默认的依赖库的位置包括lib, /usr/lib ,/usr/local/lib 通过命令export LD_LIBRARY_PATHdesired_path:$LD_LIBRARY_PATH追加…...

网络安全领域的最新动态和漏洞信息

网络安全领域的最新动态和漏洞信息涉及多个方面&#xff0c;以下是对这些信息的详细归纳&#xff1a; 一、网络安全领域最新动态世界互联网大会乌镇峰会召开2024年11月19日至22日&#xff0c;以“拥抱以人为本、智能向善的数字未来——携手构建网络空间命运共同体”为主题的202…...

华为开源自研AI框架昇思MindSpore应用案例:人体关键点检测模型Lite-HRNet

如果你对MindSpore感兴趣&#xff0c;可以关注昇思MindSpore社区 一、环境准备 1.进入ModelArts官网 云平台帮助用户快速创建和部署模型&#xff0c;管理全周期AI工作流&#xff0c;选择下面的云平台以开始使用昇思MindSpore&#xff0c;获取安装命令&#xff0c;安装MindSpo…...

每日OJ题_牛客_天使果冻_递推_C++_Java

目录 牛客_天使果冻_递推 题目解析 C代码 Java代码 牛客_天使果冻_递推 天使果冻 描述&#xff1a; 有 n 个果冻排成一排。第 i 个果冻的美味度是 ai。 天使非常喜欢吃果冻&#xff0c;但她想把最好吃的果冻留到最后收藏。天使想知道前 x个果冻中&#xff0c;美味…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...