猫狗分类识别②图像归一化-位置和重心归一化处理

一、导入库

globos 都是Python的标准库模块,也就是说它们随Python一起安装,无需额外安装即可使用。

  • glob 模块提供了一个在目录中使用通配符搜索创建文件列表的函数,例如,可以使用 glob.glob('*.txt') 来查找当前目录下所有的 .txt 文件。
  • os 模块提供了与操作系统交互的接口,包括文件和目录操作、进程管理、系统环境变量等。

这两个模块都是Python自带的,可以直接通过 import 语句导入并使用。

cv2 是 OpenCV(Open Source Computer Vision Library)的 Python 绑定库。OpenCV 是一个开源的计算机视觉和机器学习库,它包含了超过 2500 个优化的算法,能处理图像和视频数据。OpenCV 最初是用 C/C++ 编写的,但现在已经可以支持多种语言,包括 Python。

在 Python 中,OpenCV 绑定库通常通过 import cv2 导入,并且这个库广泛用于实时图像处理、计算机视觉、模式识别、摄影测量、3D 建模等领域。

OpenCV 可以用于处理图像和视频数据,包括图像滤波、特征提取、目标检测、光流法、立体视觉、运动分析、图像分割等高级功能。cv2 提供了大量的函数和方法来实现这些功能,以及方便的矩阵操作,使得图像处理和计算机视觉任务变得简单高效。

在 Python 中使用 cv2,需要先安装 opencv-python 包,这通常可以通过 pip 安装(numpy同理安装,关于numpy库不做详细介绍):

pip install opencv-pythonpip  install numpy

二、归一化

外框归一化大小可以自主设置,为了模型建立一般设置为小于(64 * 64)。具体实现如下:

import glob
import osimport cv2
import numpy as np# 设置输入和输出文件夹路径
input_folder = ("imgs//"  # 替换为实际的输入文件夹路径
)
output_folder = ("imgs2/"  # 替换为实际的输出文件夹路径
)# 确保输出文件夹存在
if not os.path.exists(output_folder):os.makedirs(output_folder)# 遍历输入文件夹中的所有png图像
image_paths = glob.glob(os.path.join(input_folder, "*.png"))
if not image_paths:print("No PNG images found in the input folder.")exit()for image_path in image_paths:# 读取图像image = cv2.imread(image_path, 0)if image is None:print(f"Failed to read image: {image_path}")continue# 重心归一化moments = cv2.moments(image)if moments["m00"] == 0:# 如果图像为空(全黑或全白),则不进行归一化,直接跳过或可以选择进行外框归一化print(f"Skipping image with no moments: {image_path}")continuecx = moments["m10"] / moments["m00"]cy = moments["m01"] / moments["m00"]# 计算平移量以使重心居中tx = -cx + image.shape[1] / 2ty = -cy + image.shape[0] / 2M = np.float32([[1, 0, tx], [0, 1, ty]])centered_image = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))# 裁剪图像以确保重心位于中心,并且去除平移后产生的空白边缘height, width = centered_image.shape[:2]left = max(0, int(tx))top = max(0, int(ty))right = min(width, int(tx + width))bottom = min(height, int(ty + height))centered_image_cropped = centered_image[top:bottom, left:right]# 外框归一化(假设目标大小为64x64像素)resized_image = cv2.resize(centered_image_cropped, (128, 128))# 保存归一化后的图像output_path = os.path.join(output_folder, os.path.basename(image_path))cv2.imwrite(output_path, resized_image)print(f"Saved normalized image to: {output_path}")

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

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

相关文章

Android OpenMAX(七)OMX Service

上一篇文章我们分析了Android使用OMXStore来管理平台上的软件和硬件编解码组件,这一篇我们再向上一层了解应用层是如何获取调用OMXStore管理组件的。本篇文章代码参考自: frameworks/av/services/mediacodec/main_codecservice.cpp frameworks/av/media/libstagefright/omx/1…

Mybatis Plus ActiveRecord 模式

Mybatis Plus ActiveRecord 模式 使用 DEMO源码地址 https://gitee.com/JackSong2019/demo-mybatis3.git 前言 ActiveRecord 模式 简介 ActiveRecord 是一种设计模式,它是一种在软件开发中用于管理关系数据库的模式,他简化了数据库操作的流程&#xf…

docker八大架构之应用服务集群架构

应用服务集群架构 在之前,一个应用层要负责所有的用户操作,但是有时用户增加后就会导致供不应求的现象(单个应用不足以支持海量的并发请求,高并发的时候站点响应变慢),这时就需要增加应用层服务器&#xf…

【STM32 |GPIO】GPIO结构、GPIO输出

目录 GPIO简介 GPIO的基本结构 GPIO位结构(每一位的具体电路结构) 输入 上拉和下拉电阻 斯密特触发器 ​编辑 输出 GPIO模式 ​编辑 浮空输入、上拉输入、下拉输入 模拟输入 开漏输出和推挽输出 复用开漏输出和复用推挽输出 LED和蜂鸣器…

简述线程同步和线程通信及如何实现线程间的同步

一、线程同步和线程通信是多线程编程中的两个重要概念。 线程同步: 线程同步是指当有一个线程在对内存进行操作时(如读取、写入等),其他线程都不可以对该内存地址进行操作,直到该线程完成操作,其他线程才…

FFmpeg开发笔记(二十七)APP无法访问ZLMediaKit的HLS直播地址

上一篇文章介绍了如何通过ZLMediaKit实现视频推拉流,并使用VLC播放器验证视频直播地址。即使不用VLC播放器,直接在Qt工程的C代码中调用FFmpeg的API,也能访问ZLMediaKit的直播地址,并正常渲染视频画面。关于如何在Qt工程中引入FFmp…

【资源分享】完胜谷歌翻译的Deepl翻译

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

【数据结构与算法】力扣 111. 二叉树的最小深度

题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 2示例 2&#…

长事务的理解和预防

我们常常听说数据库发生了“长事务”而导致很严重的后果。那么何为长事务?长事务是如何产生的?长事务对数据库有什么影响?如何防止长事务的产生?以下对这几方面进行阐述和说明,以加深对SinoDB长事务的理解。 1&#x…

Python-VBA函数之旅-super函数

目录 一、super函数的常见应用场景 二、super函数使用注意事项 三、如何用好super函数? 1、super函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://myelsa1024.blog.csdn.net/ 一、su…

AI代理和AgentOps生态系统的剖析

1、AI代理的构成:AI代理能够根据用户的一般性指令自行做出决策和采取行动。 主要包含四个部分: (1)大模型(LLM) (2)工具:如网络搜索、代码执行等 (3&#x…

探索未来:IT行业的革新脉动与明日图景

你眼中的IT行业现状与未来趋势 随着技术的不断进步,IT行业已成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链,这些技术正在重塑我们的生活和工作方式。你眼中IT行业的现状及未来发展趋势是怎么样的&#xf…

开散列哈希桶

通过上面这幅图,读者应该能较为直观地理解何为开散列,以及闭散列与开散列的区别在哪里 —— 数据的存储形式不同,至于其他的,如确定每个元素的哈希地址等一概相同。 与闭散列相比,开散列能够更好地处理发生冲突的元素 …

Taro + React + Tailwind 开发微信小程序问题汇总(持续更新中...)

搞小程序也有两周了,踩了很多坑,有些问题很难搜索到,在这里记录一下问题和自己的解决方案,希望能帮助到需要的小伙伴~ 1. 真机调试报错:Error: module ‘babel/runtime/helpers/Arrayincludes.js’ is not …

Transformers 加速的一些常用技巧

Transformers 是一个强大的架构,但模型因其采用的自注意力机制,虽然能够有效地处理序列数据并捕获长距离依赖关系,但同时也容易导致在训练过程中出现OOM(Out of Memory,内存不足)或者达到GPU的运行时限制。…

AI大模型探索之路-训练篇22: ChatGLM3微调实战-从原理到应用的LoRA技术全解

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

MPLAB X IDE编译attiny1616工程报错却无报错信息

MPLAB X IDE(XC-8编译器)编译报错,无具体错误内容,仅显示需要xc-8 pro的警告。 内存占用率显示为81%,未超标。 原因:软件使用了microchip的bootloader功能。应用程序起始地址(也是bootloader结束地址)设置错…

社交巨头:探索Facebook的震撼力量

Facebook作为社交媒体领域的巨头,不仅在数字化社会中占据着重要地位,更是影响了人们的生活、工作和社交方式。本文将深入探索Facebook的震撼力量,从多个角度解读其在当今社会中的重要性和影响。 1. 全球用户覆盖的壮观规模 Facebook作为全球…

软件定义汽车七大典型应用场景

随着软件定义汽车典型应用场景的落地,用户将明显体验到汽车从交通工具向智能移动终端的转变。几十年前主要用高性能的底盘操稳与动力系统定义一台好车,几年前主要用智能化系统与智能交互满足终端用户的用车体验,未来将调度全车传感器与数据驱…