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

python使用openvc库进行图像数据增强

以下是使用Python和OpenCV库实现图像数据增强的简单示例代码,其中包括常用的数据增强操作:

import cv2
import numpy as np
import os# 水平翻转
def horizontal_flip(image):return cv2.flip(image, 1)# 垂直翻转
def vertical_flip(image):return cv2.flip(image, 0)# 随机旋转
def random_rotation(image, angle_range=(-10, 10)):angle = np.random.randint(angle_range[0], angle_range[1])height, width = image.shape[:2]rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), angle, 1)rotated_image = cv2.warpAffine(image, rotation_matrix, (width, height))return rotated_image# 随机裁剪
def random_crop(image, crop_size=(224, 224)):height, width = image.shape[:2]left = np.random.randint(0, width - crop_size[0])top = np.random.randint(0, height - crop_size[1])right = left + crop_size[0]bottom = top + crop_size[1]cropped_image = image[top:bottom, left:right]return cropped_image# 添加随机噪声
def random_noise(image, noise_range=(20, 50)):noise = np.random.randint(noise_range[0], noise_range[1], size=image.shape, dtype=np.uint8)noisy_image = cv2.add(image, noise)return np.clip(noisy_image, 0, 255)# 设置原始图像路径和增强后图像保存路径
original_path = "original_images"
augmented_path = "augmented_images"# 确保存储路径存在
os.makedirs(augmented_path, exist_ok=True)# 遍历原始图像路径下的所有图像
for filename in os.listdir(original_path):if filename.endswith(".jpg") or filename.endswith(".png"):image_path = os.path.join(original_path, filename)image = cv2.imread(image_path)# 水平翻转h_flip = horizontal_flip(image)cv2.imwrite(os.path.join(augmented_path, f"flip_h_{filename}"), h_flip)# 垂直翻转v_flip = vertical_flip(image)cv2.imwrite(os.path.join(augmented_path, f"flip_v_{filename}"), v_flip)# 随机旋转rotated = random_rotation(image)cv2.imwrite(os.path.join(augmented_path, f"rotated_{filename}"), rotated)# 随机裁剪cropped = random_crop(image)cv2.imwrite(os.path.join(augmented_path, f"crop_{filename}"), cropped)# 添加随机噪声noisy = random_noise(image)cv2.imwrite(os.path.join(augmented_path, f"noisy_{filename}"), noisy)

在这个示例代码中,我们使用OpenCV库来加载和处理图像。我们定义了几个常用的数据增强操作函数,包括水平翻转、垂直翻转、随机旋转、随机裁剪和添加随机噪声。然后,我们遍历原始图像路径下的所有图像,对每张图像进行数据增强操作,并保存到增强后图像保存路径。

请注意,为了运行此代码,您需要安装OpenCV库。可以使用pip install opencv-python命令来安装。同时,确保将原始图像放在指定的原始图像路径下,并设置好增强后图像的保存路径。

# -*- coding: utf-8 -*-import cv2
import numpy as np
import os.path
import copy# 椒盐噪声def SaltAndPepper(src, percetage):SP_NoiseImg = src.copy()SP_NoiseNum = int(percetage*src.shape[0]*src.shape[1])for i in range(SP_NoiseNum):randR = np.random.randint(0, src.shape[0]-1)randG = np.random.randint(0, src.shape[1]-1)randB = np.random.randint(0, 3)if np.random.randint(0, 1) == 0:SP_NoiseImg[randR, randG, randB] = 0else:SP_NoiseImg[randR, randG, randB] = 255return SP_NoiseImg# 高斯噪声def addGaussianNoise(image, percetage):G_Noiseimg = image.copy()w = image.shape[1]h = image.shape[0]G_NoiseNum = int(percetage*image.shape[0]*image.shape[1])for i in range(G_NoiseNum):temp_x = np.random.randint(0, h)temp_y = np.random.randint(0, w)G_Noiseimg[temp_x][temp_y][np.random.randint(3)] = np.random.randn(1)[0]return G_Noiseimg# 昏暗def darker(image, percetage=0.9):image_copy = image.copy()w = image.shape[1]h = image.shape[0]# get darkerfor xi in range(0, w):for xj in range(0, h):image_copy[xj, xi, 0] = int(image[xj, xi, 0]*percetage)image_copy[xj, xi, 1] = int(image[xj, xi, 1]*percetage)image_copy[xj, xi, 2] = int(image[xj, xi, 2]*percetage)return image_copy# 亮度def brighter(image, percetage=1.5):image_copy = image.copy()w = image.shape[1]h = image.shape[0]# get brighterfor xi in range(0, w):for xj in range(0, h):image_copy[xj, xi, 0] = np.clip(int(image[xj, xi, 0]*percetage), a_max=255, a_min=0)image_copy[xj, xi, 1] = np.clip(int(image[xj, xi, 1]*percetage), a_max=255, a_min=0)image_copy[xj, xi, 2] = np.clip(int(image[xj, xi, 2]*percetage), a_max=255, a_min=0)return image_copy# 旋转def rotate(image, angle, center=None, scale=1.0):(h, w) = image.shape[:2]# If no rotation center is specified, the center of the image is set as the rotation centerif center is None:center = (w / 2, h / 2)m = cv2.getRotationMatrix2D(center, angle, scale)rotated = cv2.warpAffine(image, m, (w, h))return rotated# 翻转def flip(image):flipped_image = np.fliplr(image)return flipped_image# 图片文件夹路径
file_dir = r'test/img/'
for img_name in os.listdir(file_dir):img_path = file_dir + img_nameimg = cv2.imread(img_path)# cv2.imshow("1",img)# cv2.waitKey(5000)# 旋转rotated_90 = rotate(img, 90)cv2.imwrite(file_dir + img_name[0:-4] + '_r90.jpg', rotated_90)rotated_180 = rotate(img, 180)cv2.imwrite(file_dir + img_name[0:-4] + '_r180.jpg', rotated_180)for img_name in os.listdir(file_dir):img_path = file_dir + img_nameimg = cv2.imread(img_path)# 镜像flipped_img = flip(img)cv2.imwrite(file_dir + img_name[0:-4] + '_fli.jpg', flipped_img)# 增加噪声# img_salt = SaltAndPepper(img, 0.3)# cv2.imwrite(file_dir + img_name[0:7] + '_salt.jpg', img_salt)img_gauss = addGaussianNoise(img, 0.3)cv2.imwrite(file_dir + img_name[0:-4] + '_noise.jpg', img_gauss)# 变亮、变暗img_darker = darker(img)cv2.imwrite(file_dir + img_name[0:-4] + '_darker.jpg', img_darker)img_brighter = brighter(img)cv2.imwrite(file_dir + img_name[0:-4] + '_brighter.jpg', img_brighter)blur = cv2.GaussianBlur(img, (7, 7), 1.5)#      cv2.GaussianBlur(图像,卷积核,标准差)cv2.imwrite(file_dir + img_name[0:-4] + '_blur.jpg', blur)

相关文章:

python使用openvc库进行图像数据增强

以下是使用Python和OpenCV库实现图像数据增强的简单示例代码,其中包括常用的数据增强操作: import cv2 import numpy as np import os# 水平翻转 def horizontal_flip(image):return cv2.flip(image, 1)# 垂直翻转 def vertical_flip(image):return cv2…...

如何利用Api接口获取手机当前的网络位置信息

在移动互联网时代,手机定位已经成为了一个日常化的需求,无论是导航、社交还是打车等服务都需要获取手机的位置信息。而获取手机位置信息最基础的一步就是获取手机当前的网络位置信息,本文将介绍如何利用API接口获取手机当前的网络位置信息。 …...

vue-elementPlus自动按需导入和主题定制

elementPlus自动按需导入 装包 -> 配置 1. 装包(主包和两个插件包) $ npm install element-plus --save npm install -D unplugin-vue-components unplugin-auto-import 2. 配置 在vite.config.js文件中配置,配置完重启(n…...

idea中dataBase模板生成

controller.java.vm ##定义初始变量 #set($tableName $tool.append($tableInfo.name, "Controller")) ##设置回调 $!callback.setFileName($tool.append($tableName, ".java")) $!callback.setSavePath($tool.append($tableInfo.savePath, "/contro…...

pc端测试手机浏览器运行情况,主要是测试硬件功能

测试h5震动摇晃等功能时不方便测试,需要连电脑显示调试数据 方法: 1.需要手机下载谷歌浏览器,pc端用edge或这谷歌浏览器 2.手机打开USB调试,打开要测试的网页 3.pc端地址栏输入edge://inspect/#devices(这里用的edge浏…...

软件概要设计-架构真题(二十五)

软件概要设计包括软件设计的结构、确定系统功能模块及其相互关系,主要采用()描述程序的结构。(2018年) 程序流程图、PAD图和伪代码模块结构图、数据流图和盒图模块结构图、层次图和HIPO图程序流程图、数据流图和层次图…...

CSDN发文表情包整理

文章目录 简介部分Emoji表情符号简表人物自然物品地点符号 各种Emoji表情链接 简介 CSDN支持Markdown语法及Emoji表情,使用各种Emoji表情可以使得自己的博文更加生动多彩。一般有两种在支持Markdown的语法环境中添加Emoji表情:1.直接将表情包复制到文档…...

springBoot对接Apache POI 实现excel下载和上传

搭建springboot项目 此处可以参考 搭建最简单的SpringBoot项目_Steven-Russell的博客-CSDN博客 配置Apache POI 依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version> </…...

定积分的计算:牛顿-莱布尼茨公式

目录 牛顿-莱布尼茨公式 用C语言代码实现 利用换元积分法和分部积分法 利用奇偶性和周期性求积分 利用已有公式求积分 牛顿-莱布尼茨公式 牛顿-莱布尼茨公式&#xff08;Newton-Leibniz formula&#xff09;是微积分学中的基本定理之一&#xff0c;它反映了定积分与被积函…...

shell脚本之case 的用法

shell脚本之case case是Shell脚本中的一种控制流语句&#xff0c;它允许根据变量的值选择不同的执行路径。case语句的语法如下&#xff1a; case word in pattern [| pattern]...) command-list ;; pattern [| pattern]...) command-list ;; ... *) command-list ;; esa…...

第3章 helloworld 驱动实验(iTOP-RK3568开发板驱动开发指南 )

在学习C语言或者其他语言的时候&#xff0c;我们通常是打印一句“helloworld”来开启编程世界的大门。学习驱动程序编程亦可以如此&#xff0c;使用helloworld作为我们的第一个驱动程序。 接下来开始编写第一个驱动程序—helloworld。 3.1 驱动编写 本小节来编写一个最简单的…...

基于PyTorch使用LSTM实现新闻文本分类任务

本文参考 PyTorch深度学习项目实战100例 https://weibaohang.blog.csdn.net/article/details/127154284?spm1001.2014.3001.5501 文章目录 本文参考任务介绍做数据的导入 环境介绍导入必要的包介绍torchnet和keras做数据的导入给必要的参数命名加载文本数据数据前处理模型训…...

Flutter插件的制作和发布

Flutter制作插件有两种方式&#xff08;以下以android和ios为例&#xff09;&#xff1a; 目录 1.直接在主工程下的android和ios项目内写插件代码&#xff1a;2.创建独立Flutter Plugin项目&#xff0c;制作各端插件后&#xff0c;再引入项目&#xff1a;1. 创建Flutter Plugin…...

【JAVA】异常

作者主页&#xff1a;paper jie 的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…...

合同矩阵充要条件

两个实对称矩阵合同的充要条件是它们的正负惯性指数相同。 正惯性指数是矩阵正特征值个数&#xff0c;负惯性指数是矩阵负特征值个数。 即合同矩阵的充分必要条件是特征值的正负号个数相同。 证明&#xff1a; 本论证中的所有矩阵都是对称矩阵。 根据定义&#xff0c;若矩…...

数据分析三剑客之Pandas

1.引入 前面一篇文章我们介绍了numpy&#xff0c;但numpy的特长并不是在于数据处理&#xff0c;而是在它能非常方便地实现科学计算&#xff0c;所以我们日常对数据进行处理时用的numpy情况并不是很多&#xff0c;我们需要处理的数据一般都是带有列标签和index索引的&#xff0…...

Spring Boot自动装配原理

简介 Spring Boot是一个开源的Java框架&#xff0c;旨在简化Spring应用程序的搭建和开发。它通过自动装配的机制&#xff0c;大大减少了繁琐的配置工作&#xff0c;提高了开发效率。本文将深入探讨Spring Boot的自动装配原理。 自动装配的概述 在传统的Spring框架中&#xf…...

VMware Workstation虚拟机网络配置及配置自动启动

目录 一、网络配置二、配置自动启动1.VMware 中配置虚拟机自启动2.系统服务中配置 VMware 服务自启动 一、网络配置 本文将虚拟机 IP 与主机 IP 设置为同一个网段。 点击 “编辑” -> “虚拟网络编辑器(N)…”&#xff1a; 点击 “更改设置”&#xff1a; 将 VMnet0 设置…...

智能语音机器人竞品调研

一、腾讯云-智能客服机器人 链接地址&#xff1a;智能客服机器人_在线智能客服_智能客服解决方案 - 腾讯云 二、阿里云-智能语音机器人 链接地址&#xff1a;智能对话机器人-阿里云帮助中心 链接地址&#xff1a;智能外呼机器人的业务架构_智能外呼机器人-阿里云帮助中心 三、火…...

【操作系统】进程的概念、组成、特征

概念组成 程序&#xff1a;静态的放在磁盘&#xff08;外存&#xff09;里的可执行文件&#xff08;代码&#xff09; 作业&#xff1a;代码&#xff0b;数据&#xff0b;申请&#xff08;JCB&#xff09;&#xff08;外存&#xff09; 进程&#xff1a;程序的一次执行过程。 …...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...