深度学习_13_YOLO_图片切片及维度复原

需求:

在对获取的图片进行识别的时候,如果想减少不必要因素的干扰,将图片切割只对有更多特征信息的部分带入模型识别,而剩余有较多干扰因素的部分舍弃,这就是图片切割的目的,但是又由于模型对图片的维度有较高的要求,切割后的图片在维度上已经不满足模型所需要的维度,而将被切割图片的维度恢复,进而能带入模型识别,是本次重点

对于图片处理有两种手段:

1、填充式还原

即保留的图片部分不变,剩余的被切割部分用白色填充 (当然也可以用其他的颜色填充)

函数代码:

def picture_Fill(img, boundary): # 填充函数# 创建与原始图像相同大小的全白图像white_frame = np.ones_like(img) * 255  # 255 白色,床创建全白图片white_frame[0:boundary, :] = img[0:boundary, :] # 水平方向全部取出,垂直方向取0~boundaryreturn white_frame

即创建一个与原图片一样大小的白色图片,将需要被保留的部分填入白色图片中

2、扩大还原式

对切割后的图片进行放大,恢复到原来的维度值

函数代码:

def picture_BrowUp(img, boundary):img_copy = img.copy() # 备份img = img[0:boundary, :] # 截取img = cv2.resize(img, (img_copy.shape[1], img_copy.shape[0]), interpolation=cv2.INTER_LINEAR) # 放大return img

获取原本图片的所有维度大小,在扩大的过程中指定扩大的大小值

测试:

切割目标:

在这里插入图片描述

1、填充式测试
代码:

import matplotlib.pyplot as plt
import cv2
import numpy as npdef picture_BrowUp(img, boundary):img_copy = img.copy() # 备份img = img[0:boundary, :] # 截取img = cv2.resize(img, (img_copy.shape[1], img_copy.shape[0]), interpolation=cv2.INTER_LINEAR) # 放大return imgdef picture_Fill(img, boundary): # 填充函数# 创建与原始图像相同大小的全白图像white_frame = np.ones_like(img) * 255  # 255 白色,床创建全白图片white_frame[0:boundary, :] = img[0:boundary, :] # 水平方向全部取出,垂直方向取0~boundaryreturn white_frame# 读取原始图像
frame = cv2.imread('C:\\Users\\86153\\Pictures\\Camera Roll\\1.png')  # 请将 'your_image_path.jpg' 替换为你的图像路径frame = picture_Fill(frame, 300) # 填充函数plt.imshow(frame)
plt.axis('off')  # 关闭坐标轴
plt.show()

效果:

在这里插入图片描述
2、扩大式测试

代码:

import matplotlib.pyplot as plt
import cv2
import numpy as npdef picture_BrowUp(img, boundary):img_copy = img.copy() # 备份img = img[0:boundary, :] # 截取img = cv2.resize(img, (img_copy.shape[1], img_copy.shape[0]), interpolation=cv2.INTER_LINEAR) # 放大return imgdef picture_Fill(img, boundary): # 填充函数# 创建与原始图像相同大小的全白图像white_frame = np.ones_like(img) * 255  # 255 白色,床创建全白图片white_frame[0:boundary, :] = img[0:boundary, :] # 水平方向全部取出,垂直方向取0~boundaryreturn white_frame# 读取原始图像
frame = cv2.imread('C:\\Users\\86153\\Pictures\\Camera Roll\\1.png')  # 请将 'your_image_path.jpg' 替换为你的图像路径frame = picture_BrowUp(frame, 300) # 填充函数plt.imshow(frame)
plt.axis('off')  # 关闭坐标轴
plt.show()

效果:

在这里插入图片描述
实践效果评价:

从机器识别上述处理过的图片来看,填充式的效果更加好,其原因在于将不必要的部分用白色代替,减少了不必要的干扰,而扩大式的识别较差,可能是图片的放大损坏了图片的空间结构,也不难排除扩大操作耗费的时间较多导致识别过慢,当然也和所用的识别图片模型的不同有关。

补充:

OpenCV(cv2库)是一个开源计算机视觉库,它提供了许多用于图像处理、计算机视觉和机器学习的功能。这个库被广泛应用于各种各样的领域,包括图像处理、视频分析、对象识别、人脸识别、机器视觉等领域。

它提供了丰富的函数和工具,用于加载、保存、处理图像和视频。OpenCV
能够执行图像的基本操作(如裁剪、调整大小、旋转等),还能进行更高级的图像处理(如图像滤波、边缘检测、特征提取等)。此外,它还提供了许多机器学习算法的实现,用于对象检测、人脸识别、姿态估计等任务。

这个库支持多种编程语言,包括 C++、Python、Java 等,让开发者能够在不同的平台上使用相同的功能。OpenCV
在计算机视觉和图像处理领域是一个非常强大和受欢迎的工具。

图片的维度和pytorch的维度排布有所差别例如图片的shape为(500, 720, 3)那么其高度、宽度、通道数分别为500、720、3而对将图片转化成pytorch张量之后就变成了(3, 500, 720)即通道数,高度宽度

转换代码如下:

# 转换为 PyTorch Tensor,并调整维度
image_tensor = torch.from_numpy(np.transpose(image, (2, 0, 1)))  # 调整维度为 (通道数, 高度, 宽度)

至于为什么要把图片转换为 pytorch (张量),因为一般训练出来的模型都是用张量数据的图片训练出来的,直接用图片的话,维度不一样,会报错

而且张量的优势在于其能添加一个批量大小维度,这样能一次性识别多个图片,这一样问题就转化成上节的多类分类问题

添加维度代码:

# 如果你有多张图片,可以添加批量维度
# image_tensor = image_tensor.unsqueeze(0)  # 添加批量维度,变成 (1, 3, 500, 720) 形状的 Tensor

一般模型都是有批量维度,也就是说有四维,如果仅仅用三维图片张量是无法带入模型识别的,所以必须添加批量维度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/149920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud学习(十)【Elasticsearch搜索功能 分布式搜索引擎02】

文章目录 DSL查询文档DSL查询分类全文检索查询精准查询地理坐标查询组合查询相关性算分Function Score Query复合查询 Boolean Query 搜索结果处理排序分页高亮 RestClient查询文档快速入门match查询精确查询复合查询排序、分页、高亮 黑马旅游案例 DSL查询文档 DSL查询分类 …

QT day3作业

1.思维导图 2、 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密…

不懂找伦敦银趋势?3个方法搞定

趋势是我们的朋友,但是这个朋友却很喜欢跟我们开玩笑,如果我们不留意,根本发觉不了它的存在。怎么找到趋势本体并且和它做个好朋友呢?下面我们就来介绍三个方法。 数波段的高点和低点。我们以当前的市场波动价格为轴,向…

IDEA中更换java项目JDK

我们打开IDEA 打开项目 然后选择 File 下的 Project Structure 这里 我们下拉选择自己需要的JDK Sources这里 也要设置一下JDK对应版本 然后 上面这个 Project 中 也要设置一下对应jdk的版本 保持一直 然后 我们打开 File 下的 Settings 然后 找到如下图配置 如果JKD版本看…

深度学习人体语义分割在弹幕防遮挡上的实现 - python 计算机竞赛

文章目录 1 前言1 课题背景2 技术原理和方法2.1基本原理2.2 技术选型和方法 3 实例分割4 实现效果5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习人体语义分割在弹幕防遮挡上的应用 该项目较为新颖,适合作为竞…

Unity Meta Quest 一体机开发(七):配置玩家 Hand Grab 功能

文章目录 📕教程说明📕玩家物体配置 Hand Grab Interactor⭐添加 Hand Grab Interactor 物体⭐激活 Hand Grab Visual 和 Hand Grab Glow⭐更新 Best Hover Interactor Group 📕配置可抓取物体(无抓取手势)⭐刚体和碰撞…

DDPM的学习

Denoising Model 首先是宏观理解一下 Denoising Model 的输入 去噪很多步,用的是同一个Denoising Model,但是输入图片可能差距很大。解决方法:给Denoising Model多输入一个变量,表示现在的去噪阶段,让Denoising Mod…

解决requests 2.28.x版本SSL错误:证书验证失败

1、问题背景 在使用requests 2.28.1版本时,我进行HTTP post传输报告负载时,由于SSL验证设置为True,请求失败,错误如下:(Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certifi…

ChatGPT最强?文心一言与ChatGPT对比

对于同一个问题我们分别对文心一言3.5和ChatGPT3.5输出回答,结果如下图,可以看到文心一言的回答更好,文心一言是由百度开发的人工智能语言模型,它的中文理解能力主要是基于百度强大的搜索引擎和自然语言处理技术。文心一言更加注重…

mysql优化之explain 以及 索引优化

Mysql安装文档参考:https://blog.csdn.net/yougoule/article/details/56680952 Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设…

非关系型数据库Redis(缓存型数据库)

关系型数据库和非关系型数据库的区别 关系型数据库 是一个结构化的数据库,记录方式是行(记录对象属性)和列(声明对象) 表与表之间是有关联的,使用sql语句来对指定的表、库进行增删改查 在创建表的时候&…

hive sql 行列转换 开窗函数 炸裂函数

hive sql 行列转换 开窗函数 炸裂函数 准备原始数据集 学生表 student.csv 讲师表 teacher.csv 课程表 course.csv 分数表 score.csv 员工表 emp.csv 雇员表 employee.csv 电影表 movie.txt 学生表 student.csv 001,彭于晏,1995-05-16,男 002,胡歌,1994-03-20,男 003,周杰伦,…

Flutter 中数据存储的四种方式

在 Flutter 中,存储是指用于本地和远程存储和管理数据的机制。以下是 Flutter 中不同存储选项的概述和示例。 Shared Preferences(本地键值存储) Shared Preferences 是一种在本地存储少量数据(例如用户首选项或设置&#xff09…

buildadmin+tp8表格操作(7.1)表格的事件监听(el-table中的事件)

因为buildAdmin是封装的 el-table的组件,所以el-table中的事件, 也是可以使用的, 两者有几个事件是有共同的(比如 双击事件), 这时可以根据自己的需要自行选择 以下代码是 buildadmin 使用 el-table中的事…

用公式告诉你 现货黄金投资者要不要换策略?

看过笔者相关文章的朋友都知道,其实笔者是相当不鼓励投资者更改策略的。但这并不意味着,策略不能改或者换。之所以反对更改策略,是因为很多人对自己的策略还没上手,没了解清楚就急着换策略,这是没必要的。通过下面这个…

Vuex 组件间通讯

组件间通讯 Vuex https://vuex.vuejs.org/zh/ 基本原理 数据提取到父级 // index 文件 import Vue from vue import Vuex from "vuex" import tab from ./tab // 引入 modulesVue.use(Vuex) // 全局引入// 创建 Vuex 实例 export default new Vuex.Store({modules: …

iPaaS和RPA,企业自动化应该如何选择?

全球著名的咨询调查机构Gartner在2022年初再次发布了《2022年12大技术趋势》报告。 Gartner是全球最具权威的IT研究与顾问咨询公司,成立于1979年,在界定及分析那些决定了商业进程的发展趋势与技术方面,它拥有二十年以上的丰富经验&#xff0c…

uniapp-轮播图点击预览功能

实现效果 点击后打开预览图 实现代码 <swiper v-if"this.bannerList.length > 1" class"swiper" autoplay"true" duration"500" interval"2000" change"changeSwiper"><swiper-item class"swip…

Web之JavaScript(jQuery)笔记

Web之HTML、CSS、JavaScript 三、JavaScriptJS调试变量自定义函数数据类型及转换运算符优先级内置函数数组事件DOM(Document Object Model 文档对象模型)jQuery Web之HTML笔记 Web之CSS笔记 三、JavaScript JavaScript&#xff08;简称“JS”&#xff09;是一种轻量级的面向对…

element-ui中怎样使用iconfont的图标

1 登录 https://www.iconfont.cn/ 2 搜索合适的图 这里可以找到这个图所在的图库。这样就可以一次查找到对应的所有同款图标 3 选择同款加入购物车 4 将购物车的icon加入项目&#xff0c;注意是新建项目&#xff0c;除非你是确定需要前面已经加过的icon 5 下载icon 选择fon…