当前位置: 首页 > 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)
http://www.lryc.cn/news/166066.html

相关文章:

  • 如何利用Api接口获取手机当前的网络位置信息
  • vue-elementPlus自动按需导入和主题定制
  • idea中dataBase模板生成
  • pc端测试手机浏览器运行情况,主要是测试硬件功能
  • 软件概要设计-架构真题(二十五)
  • CSDN发文表情包整理
  • springBoot对接Apache POI 实现excel下载和上传
  • 定积分的计算:牛顿-莱布尼茨公式
  • shell脚本之case 的用法
  • 第3章 helloworld 驱动实验(iTOP-RK3568开发板驱动开发指南 )
  • 基于PyTorch使用LSTM实现新闻文本分类任务
  • Flutter插件的制作和发布
  • 【JAVA】异常
  • 合同矩阵充要条件
  • 数据分析三剑客之Pandas
  • Spring Boot自动装配原理
  • VMware Workstation虚拟机网络配置及配置自动启动
  • 智能语音机器人竞品调研
  • 【操作系统】进程的概念、组成、特征
  • 大二第二周总结
  • JDK、eclipse软件的安装
  • 235. 二叉搜索树的最近公共祖先 Python
  • Apollo介绍和入门
  • 一文看懂Oracle 19c OCM认证考试(需要Oracle OCP证书)
  • 回归预测 | MATLAB实现PSO-SDAE粒子群优化堆叠去噪自编码器多输入单输出回归预测(多指标,多图)
  • python自学
  • 元宇宙安全与著作权相关市场与技术动态:韩国视角
  • springboot整合neo4j--采用Neo4jClient和Neo4jTemplate方式
  • 【算法与数据结构】701、LeetCode二叉搜索树中的插入操作
  • 前端--HTML