python机器学习 ‘数据增强’ —— 小白都能直接用 !

----------本代码仅供教学使用,任何非法行为与本帖无关-----------

本文分为高斯噪声、图片旋转、亮度增广

import cv2
from math import *
import os
import numpy as np

pic_num = 0
image_path = r"E:\python\BaiduImageSpider-master\123"
size = 640


def remote(img, degree):
    height, width = img.shape[:2]
    radians = float(degree / 180 * pi)  # 1度 = 派(pi)/180 弧度
    heightNew = int(width * fabs(sin(radians)) + height * fabs(cos(radians)))
    widthNew = int(height * fabs(sin(radians)) + width * fabs(cos(radians)))
    # 得到二维矩阵的旋转的仿射矩阵
    matRotation = cv2.getRotationMatrix2D((width / 2, height / 2), degree, 1)
    # 中心位置的实际平移
    matRotation[0, 2] += (widthNew - width) / 2
    matRotation[1, 2] += (heightNew - height) / 2
    imgRotation = cv2.warpAffine(img, matRotation, (widthNew, heightNew), borderValue=(255, 255, 255))
    # 获取原始图像宽高。
    height, width = imgRotation.shape[0], imgRotation.shape[1]
    # 等比例缩放尺度。
    scale = height / size
    # 获得相应等比例的图像宽度。
    width_size = int(width / scale)
    # resize
    image_resize = cv2.resize(imgRotation, (width_size, size))
    return image_resize


'''图片旋转 生成(rotation + 数字)的形式 36张10°'''


def rotationos():
    print('开始运行')
    zhangshu = 1
    for dirpath, dirnames, filenames in os.walk(image_path):
        for filename in filenames:
            img = cv2.imread(os.path.join(image_path, filename))
            # print(filename.split('.')[0]) 图片的名称 例如:123.jpg的123
            zhangshu += 1
            print("第" + str(zhangshu) + "张")
            # 角度
            bright = -50
            num = 1
            agree = 0
            sigma = 0
            # 判断最快达到限度的
            while agree != 360 and bright != 150 and sigma != 30:
                agree += 120
                imgRotation = remote(img, agree)
                cv2.imwrite(image_path + '/' + filename.split('.')[0] + '-' + "rotation" + str(agree) + ".jpg",
                            imgRotation)

                num += 1
                c = 0.8
                rst = lightshi(img, c, bright)
                bright += 130
                cv2.imwrite(dirpath + '/' + filename.split('.')[0] + '-' + "light" + str(num) + '.jpg', rst)

                sigma += 15
                img_gaosi = gaosi(img, sigma)
                cv2.imwrite(image_path + '/' + filename.split('.')[0] + '-' + "Noise" + str(sigma) + ".jpg", img_gaosi)


def lightshi(img, contrast_ratio, bright):
    rows, cols, channels = img.shape
    blank = np.zeros([rows, cols, channels], img.dtype)
    rst = cv2.addWeighted(img, contrast_ratio, blank, 1 - contrast_ratio, bright)
    return rst


''' 图片亮度增加  4-200 跨度为 4'''


def lightos():
    for dirpath, dirnames, filenames in os.walk(image_path):
        for filename in filenames:
            img = cv2.imread(os.path.join(dirpath, filename))
            bright = 0
            num = 1
            while bright != 200:
                num += 1
                c = 0.8
                bright += 50
                rst = lightshi(img, c, bright)
                cv2.imwrite(dirpath + '/' + filename.split('.')[0] + '-' + "light" + str(num) + '.jpg', rst)


def gaosi(iamg, sigma):
    # sigma 设置高斯分布的标准差
    img_height, img_width, img_channels = iamg.shape
    # 设置高斯(正态分布)分布的均值和方差
    mean = 0
    # 根据均值和标准差生成符合高斯分布的噪声
    gauss = np.random.normal(mean, sigma, (img_height, img_width, img_channels))
    # 给图片添加高斯噪声
    noisy_img = iamg + gauss
    # 设置图片添加高斯噪声之后的像素值的范围
    noisy_img = np.clip(noisy_img, a_min=0, a_max=255)
    # 保存图片
    return noisy_img


''' 高斯噪点 生成(Noise + 数字)的形式  120 张图片/1噪点'''


def gaosios():
    for dirpath, dirnames, filenames in os.walk(image_path):
        for filename in filenames:
            iamg = cv2.imread(os.path.join(image_path, filename))
            sigma = 0
            while sigma != 20:
                sigma += 40
                img_gaosi = gaosi(iamg, sigma)
                cv2.imwrite(image_path + '/' + filename.split('.')[0] + '-' + "Noise" + str(sigma) + ".jpg", img_gaosi)


rotationos()
print('Done!')

使用效果图 (可增强6次)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python机器学习实战教学——基于协同过滤的电影推荐系统(超详细教学,算法分析)》是一本以协同过滤算法为基础,教授Python机器学习实战技巧的书籍。该书通过详细的教学和算法分析,帮助读者理解和运用协同过滤算法实现电影推荐系统。 协同过滤是一种根据用户历史行为和其他用户间的关系进行推荐的算法。该算法可以通过观察用户的历史观影记录和其他用户的共同观影记录,从而推断用户的个人喜好并给出个性化的电影推荐。 书中首先介绍了协同过滤算法的原理和基本概念,包括用户相似度计算、基于用户的协同过滤和基于物品的协同过滤。然后,书中详细解释了如何使用Python进行数据预处理和特征工程,如数据清洗、特征选择和特征提取等。 接下来,书中介绍了协同过滤算法的具体实现过程。从构建用户-电影评分矩阵开始,通过计算用户间的相似度关系,得出用户对未观看电影的评分预测。同时,书中还讲解了基于物品的协同过滤算法,以及如何通过计算物品之间的相似度来推荐电影。 在算法实现的过程中,书中还给出了详细的代码示例和实战案例,帮助读者理解和掌握算法的具体步骤和实际应用方法。此外,书中还对算法的优化和评估做了深入讲解,帮助读者提高算法的性能和推荐准确度。 总的来说,《Python机器学习实战教学——基于协同过滤的电影推荐系统(超详细教学,算法分析)》是一本深入浅出的书籍,通过清晰的教学和详细的算法分析,帮助读者理解和运用协同过滤算法实现电影推荐系统。无论是对Python机器学习的初学者还是已经有一定基础的读者,都能从中受益匪浅。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

-陈福城-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值