实现了两种不同的图像处理和物体检测方法
这段代码实现了两种不同的图像处理和物体检测方法:一种是基于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()
- 步骤:
- 灰度化:通过
cv2.cvtColor()将图像转换为灰度图。 - 高斯模糊:使用
cv2.GaussianBlur()进行模糊处理,减少噪声。 - Canny边缘检测:通过
cv2.Canny()检测图像中的边缘。 - 查找轮廓:使用
cv2.findContours()获取图像的外部轮廓。 - 轮廓逼近:通过
cv2.approxPolyDP()简化轮廓形状,逼近为多边形。 - 筛选矩形:通过检测轮廓点数为4的多边形,计算长宽比并判断其是否接近正方形(长宽比介于0.8和1.2之间)。
- 绘制矩形:如果符合条件,使用
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()
- 步骤:
- 加载SSD模型:通过
tf.saved_model.load()加载一个预训练的SSD模型(ssd_mobilenet_v2_coco)。 - 读取图像:使用
cv2.imread()加载图像,并将其转换为RGB格式。 - 图像处理:将图像转换为TensorFlow的张量格式,并扩展为批处理维度。
- 推理过程:通过模型的
signatures['serving_default']执行推理,获得检测的边界框、置信度和标签。 - 筛选结果:根据置信度(
scores)大于设定的阈值(0.5)进行筛选。 - 绘制边界框:使用
cv2.rectangle()绘制绿色矩形框,将检测到的物体框出。 - 显示图像:使用
matplotlib.pyplot显示处理后的图像。
- 加载SSD模型:通过
总结:
- Canny边缘检测与轮廓分析:通过对图像边缘进行检测,使用轮廓分析找出矩形,并通过长宽比进一步筛选目标。
- SSD物体检测:利用TensorFlow预训练的SSD模型进行物体检测,并在图像中绘制检测到的物体框。
这两种方法可以结合使用,在某些应用中,如检测特定形状(矩形)和使用深度学习检测物体时,互为补充。
相关文章:
实现了两种不同的图像处理和物体检测方法
这段代码实现了两种不同的图像处理和物体检测方法:一种是基于Canny边缘检测与轮廓分析的方法,另一种是使用TensorFlow加载预训练SSD(Single Shot Multibox Detector)模型进行物体检测。 1. Canny边缘检测与轮廓分析: …...
如何在MindMaster思维导图中制作PPT课件?
思维导图是一种利用色彩、图画、线条等图文并茂的形式,来帮助人们增强知识或者事件的记忆。因此,思维导图也被常用于教育领域,比如:教学课件、读书笔记、时间管理等等。那么,在MindMaster免费思维导图软件中࿰…...
ORIN NX 16G安装中文输入法
刷机版本为jetpack5.14.刷机之后预装了cuda、cudnn、opencv、tensorrt等,但是发现没有中文输入,所以记录一下安装流程。 jetson NX是arm64架构的,sougoupinyin只支持adm架构的,所以要选择安装Google pinyin 首先打开终端&#x…...
【金融风控项目-07】:业务规则挖掘案例
文章目录 1.规则挖掘简介2 规则挖掘案例2.1 案例背景2.2 规则挖掘流程2.3 特征衍生2.4 训练决策树模型2.5 利用结果划分分组 1.规则挖掘简介 两种常见的风险规避手段: AI模型规则 如何使用规则进行风控 **使用一系列逻辑判断(以往从职人员的经验)**对客户群体进行区…...
退款成功订阅消息点击后提示订单不存在
问题表现: 退款成功发送的小程序订阅消息点击进入后提示订单不存在。 修复方法: 1.打开文件app/services/message/notice/RoutineTemplateListService.php 2.找到方法sendOrderRefundSuccess 3.修改图中红圈内的链接地址 完整方法代码如下 /*** 订…...
实验一 顺序结构程序设计
《大学计算机﹣C语言版》实验报告 实验名称 实验一 顺序结构程序设计 实验目的 (1)掌握C语言中常量和变量的概念。 (2)掌握C语言中常见的数据类型。 (3)掌握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的配置目录,挂载在宿主机上方便修改,里面有config.…...
Flink监控checkpoint
Flink的web界面提供了一个选项卡来监控作业的检查点。这些统计信息在任务终止后也可用。有四个选项卡可以显示关于检查点的信息:概述(Overview)、历史(History)、摘要(Summary)和配置(Configuration)。下面依次来看这几个选项。 Overview Tab Overview选项卡列出了以…...
Ribbon 入门实战指南
Ribbon 是 Netflix 开发的一个开源项目,用于实现客户端负载均衡功能。它在微服务架构中广泛使用,并且是 Spring Cloud 生态中的重要组成部分。本文将带你从基础入门,逐步掌握如何在 Spring Cloud 项目中使用 Ribbon 实现客户端负载均衡。 1 负…...
uniapp: 微信小程序包体积超过2M的优化方法(主包从2.7M优化到1.5M以内)
一、问题描述 在使用uniapp进行微信小程序开发时,经常会遇到包体积超过2M而无法上传: 二、解决方案 目前关于微信小程序分包大小有以下限制: 整个小程序所有分包大小不超过 30M(服务商代开发的小程序不超过 20M) 单个…...
【百日算法计划】:每日一题,见证成长(026)
题目 给定一个包含正整数、加()、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。 表达式仅包含非负整数,, - ,,/ 四种运算符和空格 。 整数除法仅保留整数部分。 * * 示例 1: 输入: “32X2” 输出: 7 import…...
【大模型】prompt实践总结
文章目录 怎么才算是好的prompt设计准则基本原则精炼原则(奥卡姆剃刀准则)具体原则真实操作技巧指定角色增加fewshots列表化代码化强调需求真实迭代大模型优化情形任务的定义和评估标准似乎可以再明确一下出现了一些之前没有考虑过的特殊情况,可以重新组织语言优化Prompt来处…...
在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】
在Qt(以及C)中,& 和 * 是两个至关重要的符号,它们用于处理引用和指针。我们将逐个解释这两个符号,并提供简单示例来说明它们的用法。 1. 引用(&) 定义: 引用是一种别名,它不…...
本地部署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:挂载新磁盘到 /home 子目录 关于export LD_LIBRARY_PATH 程序运行时默认的依赖库的位置包括lib, /usr/lib ,/usr/local/lib 通过命令export LD_LIBRARY_PATHdesired_path:$LD_LIBRARY_PATH追加…...
网络安全领域的最新动态和漏洞信息
网络安全领域的最新动态和漏洞信息涉及多个方面,以下是对这些信息的详细归纳: 一、网络安全领域最新动态世界互联网大会乌镇峰会召开2024年11月19日至22日,以“拥抱以人为本、智能向善的数字未来——携手构建网络空间命运共同体”为主题的202…...
华为开源自研AI框架昇思MindSpore应用案例:人体关键点检测模型Lite-HRNet
如果你对MindSpore感兴趣,可以关注昇思MindSpore社区 一、环境准备 1.进入ModelArts官网 云平台帮助用户快速创建和部署模型,管理全周期AI工作流,选择下面的云平台以开始使用昇思MindSpore,获取安装命令,安装MindSpo…...
每日OJ题_牛客_天使果冻_递推_C++_Java
目录 牛客_天使果冻_递推 题目解析 C代码 Java代码 牛客_天使果冻_递推 天使果冻 描述: 有 n 个果冻排成一排。第 i 个果冻的美味度是 ai。 天使非常喜欢吃果冻,但她想把最好吃的果冻留到最后收藏。天使想知道前 x个果冻中,美味…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
