python实现深度学习数据增强(基于CV)

import cv2
import math
import numpy as np


class data_stength:
    def __init__(self, imgae, rows, cols, center=[0, 0]):
        self.src = imgae  # 图像
        self.rows = rows  # 行尺寸
        self.cols = cols  # 列尺寸
        self.center = center  # 旋转中心

    # 平移
    def move(self, x, y):
        self.transform = np.array([[1, 0, x], [0, 1, y], [0, 0, 1]])

    # 缩放
    def zoom(self, f):
        self.transform = np.array([[f, 0, 0], [0, f, 0], [0, 0, 1]])

    # 竖直镜像
    def Vertically(self):
        self.transform = np.array([[1, 0, 0], [0, -1, self.cols - 1], [0, 0, 1]])

    # 水平镜像
    def Horizontal(self):
        self.transform = np.array([[-1, 0, self.rows - 1], [0, 1, 0], [0, 0, 1]])

    # 旋转
    '''def Rotate(self, beta):
        # beta>0表示逆时针旋转;beta<0表示顺时针旋转
        self.transform = np.array([[math.cos(beta), -math.sin(beta), 0],
                                   [math.sin(beta), math.cos(beta), 0],
                                   [0, 0, 1]])'''

    # 三色图像运算
    def B_process(self):
        self.dst_B = np.zeros((self.rows, self.cols), dtype=np.uint8)  # blue_channel

        for i in range(self.rows):
            # print("第{}列".format(i))
            for j in range(self.cols):
                # print("第{}行".format(j))
                src_pos = np.array([i - self.center[0], j - self.center[1], 1])
                [x, y, z] = np.dot(self.transform, src_pos)  # 矩阵乘法
                x = math.floor(x)
                y = math.floor(y)
                # x = int(x) + self.center[0]  # 变换后(i,j)对应原图(x,y)
                # y = int(y) + self.center[1]  # 变换后(i,j)对应原图(x,y)
                # 边界判定
                if x >= self.rows or y >= self.cols or x < 0 or y < 0:
                    self.dst_B[i][j] = 0  # 边界
                else:
                    self.dst_B[i][j] = self.src[:, :, 0][x][y]  # 内容
        return self.dst_B

    def G_process(self):
        self.dst_G = np.zeros((self.rows, self.cols), dtype=np.uint8)  # green_channel

        for i in range(self.rows):
            # print("第{}列".format(i))
            for j in range(self.cols):
                # print("第{}行".format(j))
                src_pos = np.array([i - self.center[0], j - self.center[1], 1])
                [x, y, z] = np.dot(self.transform, src_pos)  # 矩阵乘法
                x = math.floor(x)
                y = math.floor(y)
                # x = int(x) + self.center[0]  # 变换后(i,j)对应原图(x,y)
                # y = int(y) + self.center[1]  # 变换后(i,j)对应原图(x,y)
                # 边界判定
                if x >= self.rows or y >= self.cols or x < 0 or y < 0:
                    self.dst_G[i][j] = 0  # 边界
                else:
                    self.dst_G[i][j] = self.src[:, :, 1][x][y]  # 内容
        return self.dst_G

    def R_process(self):
        self.dst_R = np.zeros((self.rows, self.cols), dtype=np.uint8)  # red_channel

        for i in range(self.rows):
            # print("第{}列".format(i))
            for j in range(self.cols):
                # print("第{}行".format(j))
                src_pos = np.array([i - self.center[0], j - self.center[1], 1])
                [x, y, z] = np.dot(self.transform, src_pos)  # 矩阵乘法
                x = math.floor(x)
                y = math.floor(y)
                # x = int(x) + self.center[0]  # 变换后(i,j)对应原图(x,y)
                # y = int(y) + self.center[1]  # 变换后(i,j)对应原图(x,y)
                # 边界判定
                if x >= self.rows or y >= self.cols or x < 0 or y < 0:
                    self.dst_R[i][j] = 0  # 边界
                else:
                    self.dst_R[i][j] = self.src[:, :, 2][x][y]  # 内容
        return self.dst_R


if __name__ == '__main__':
    '''
    # 进制问题
    a = 1.3
    b = math.ceil(a)  # 向上取整
    c = math.floor(a)  # 向下取整
    d = round(a)  # 四舍五入
    print("a:{},向上取整:{},向下取整:{},四舍五入:{}".format(a, b, c, d))
    '''
    '''src = np.random.randint(1, 10, (5, 5))
    print(src)
    rows = src.shape[0]
    cols = src.shape[1]
    # print(rows, cols)
    img = data_stength(src, rows, cols)
    img.move(1, 2)
    a = img.process()
    print(a)'''
    src = cv2.imread(r'')  # 读取图片
    print("src_type{},src_size{}".format(type(src), src.shape))
    rows = src.shape[0]
    cols = src.shape[1]
    cv2.imshow('old', src)
    img = data_stength(src, rows, cols)
    # img.move(100, 200)  # 平移,左上
    # img.Rotate(30) # 旋转
    # img.zoom(2)# 放缩
    # img.Horizontal() # y镜像
    # img.Vertically() # x镜像
    B_output = img.B_process()
    G_output = img.G_process()
    R_output = img.R_process()
    tran = src
    tran[:, :, 0] = B_output
    tran[:, :, 1] = G_output
    tran[:, :, 2] = R_output
    cv2.imshow('new', tran)
    cv2.imwrite(r'', tran)
    cv2.waitKey()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
【为什么要学习这门课程】深度学习框架如TensorFlow和Pytorch掩盖了深度学习底层实现方法,那能否能用Python代码从零实现来学习深度学习原理呢?本课程就为大家提供了这个可能,有助于深刻理解深度学习原理。左手原理、右手代码,双管齐下!本课程详细讲解深度学习原理并进行Python代码实现深度学习网络。课程内容涵盖感知机、多层感知机、卷积神经网络、循环神经网络,并使用Python 3及Numpy、Matplotlib从零实现上述神经网络。本课程还讲述了神经网络的训练方法与实践技巧,且开展了代码实践演示。课程对于核心内容讲解深入细致,如基于计算图理解反向传播算法,并用数学公式推导反向传播算法;另外还讲述了卷积加速方法im2col。【课程收获】本课程力求使学员通过深度学习原理、算法公式及Python代码的对照学习,摆脱框架而掌握深度学习底层实现原理与方法。本课程将给学员分享深度学习的Python实现代码。课程代码通过Jupyter Notebook演示,可在Windows、ubuntu等系统上运行,且不需GPU支持。【优惠说明】 课程正在优惠中!  备注:购课后可加入白勇老师课程学习交流QQ群:957519975【相关课程】学习本课程的前提是会使用Python语言以及Numpy和Matplotlib库。相关课程链接如下:《Python编程的术与道:Python语言入门》https://edu.csdn.net/course/detail/27845《玩转Numpy计算库》https://edu.csdn.net/lecturer/board/28656《玩转Matplotlib数据绘图库》https://edu.csdn.net/lecturer/board/28720【课程内容导图及特色】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZRX_GIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值