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

server/2024/11/19 19:34:19/

这段代码实现了两种不同的图像处理和物体检测方法:一种是基于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模型进行物体检测,并在图像中绘制检测到的物体框。

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


http://www.ppmy.cn/server/143277.html

相关文章

【专题】2024AIGC创新应用洞察报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p38310 在科技日新月异的今天&#xff0c;人工智能领域正以前所未有的速度发展&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;成为其中最耀眼的明珠。从其应用场景的不断拓展&#xff0c;到对各行业的深刻变革&#xff0…

【VLANPWN】一款针对VLAN的安全研究和渗透测试工具

关于VLANPWN VLANPWN是一款针对VLAN的安全研究和渗透测试工具&#xff0c;该工具可以帮助广大研究人员通过对VLAN执行渗透测试&#xff0c;来研究和分析目标VLAN的安全状况。该工具专为红队研究人员和安全学习爱好者设计&#xff0c;旨在训练网络工程师提升网络的安全性能&…

Rabbitmq集群

根据项目需要&#xff0c;三台机器搭建一个rabbitmq集群,10.10.10.1(虚拟IP&#xff0c;下同)为主节点&#xff0c;10.10.10.2和10.10.10.3为从节点。 1、安装erlang&#xff0c;该软件包是rabbitMQ依赖软件包,三台机器同步安装。 将安装包otp_src_18.3.tar上传到三台服务器的…

sql中in()方法查询参数过多处理小记

Springboot 多线程分批切割处理 大数据量List集合 &#xff0c;实用示例 Java使用多线程批次查询大量数据(Callable返回数据)方式 问题背景 业务要求对未完工的几十万甚至百万工单进行发短信提醒以及消息通知。所以每次查询需要将这海量数据查询出来。如果使用单线程&#xf…

mysql初始化失败Can‘t find error-message file‘/usr/share/mysql/errmsg.sys

errmsg.sys 是 MySQL 数据库的一个错误信息文件。它是一个二进制文件&#xff0c;存储了 MySQL 服务器可能返回的各种错误消息的定义。这个文件通常会在 MySQL 的安装目录中找到。 errmsg.sys 的作用 错误消息存储&#xff1a; MySQL 在运行过程中遇到错误时&#xff0c;会查找…

性能优化(二):ANR

介绍 ANR全称Application Not Responding&#xff0c;意思就是程序未响应。如果一个应用无法响应用户的输入&#xff0c;系统就会弹出一个ANR对话框&#xff0c;用户可以自行选择继续等待亦或者是停止当前程序。 Android系统会监控程序的响应状况&#xff0c;一旦出现下面情况…

工程化实战内功修炼测试题

什么是编译器&#xff1f; compiler也叫编译器&#xff0c;是一种电脑程序&#xff0c;它会将用某种编程语言写成的源代码&#xff0c;转换成另一种编程语言。 从维基百科的定义来看&#xff0c;编译器就是个将当前语言转为其他语言的过程&#xff0c;回到babel上&#xff0c;…

Ansible一键部署Kubernetes集群

一、环境准备 主机 ip地址 角色 k8s-master 192.168.252.141 master k8s-node1 192.168.252.142 node k8s-node2 192.168.252.143 node 二、实战 Ansible部署 主节点安装Ansible yum -y install epel-release yum -y install ansible ansible --version 开启记…