• 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 问题反馈可发送邮件到stubbornhuang@qq.com

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

python – 为图片增加随机马赛克

Python 发布于2025-01-15 阅读 1,192次 0次评论 0次点赞 本文共1682个字,阅读需要5分钟。

针对于马赛克目标检测,我们可以通过为常规图片数据集增加随机马赛克来生成数据集,当然我们也可以添加真实的马赛克图片数据。

图片增加随机马赛克的代码如下,

import os
import cv2
import random
import numpy as np

def add_random_mosaic_to_image(input_image_path, output_image_path):
    '''
    为图片添加随机马赛克
    :param input_image_path: 输入图片地址
    :param output_image_path: 输出图片地址
    :return:
    '''

    # 读取图像
    image = cv2.imread(input_image_path)
    height, width, _ = image.shape

    # 随机生产马赛克的尺寸
    mosaic_width = random.randint(0, width // 2)
    mosaic_height = random.randint(0, height // 2)

    # 随机生成马赛克的起始位置
    x = random.randint(30, width - mosaic_width)
    y = random.randint(30, height - mosaic_height)

    # 随机选择马赛克类型
    mosaic_type = random.randint(0, 1)
    if mosaic_type == 0:
        image = gaussian_mosaic(image, x, y, x + mosaic_width, y + mosaic_height)
    else:
        image = normal_mosaic(image, x, y, mosaic_width, mosaic_height)


    cv2.rectangle(image, (x, y), (x + mosaic_width, y + mosaic_height), (0, 0, 255), 2)
    cv2.imwrite(output_image_path, image)

# 高斯马赛克
def gaussian_mosaic(img, x1, y1, x2, y2):
    img[y1:y2, x1:x2, 0] = np.random.normal(size=(y2 - y1, x2 - x1))
    img[y1:y2, x1:x2, 1] = np.random.normal(size=(y2 - y1, x2 - x1))
    img[y1:y2, x1:x2, 2] = np.random.normal(size=(y2 - y1, x2 - x1))

    return img

# 正规马赛克
def normal_mosaic(img, x, y, w, h, neighbor=9):
    """
    :param rgb_img
    :param int x :  马赛克左顶点
    :param int y:  马赛克左顶点
    :param int w:  马赛克宽
    :param int h:  马赛克高
    :param int neighbor:  马赛克每一块的宽
    """
    for i in range(0, h, neighbor):
        for j in range(0, w, neighbor):
            rect = [j + x, i + y]
            color = img[i + y][j + x].tolist()  # 关键点1 tolist
            left_up = (rect[0], rect[1])
            x2 = rect[0] + neighbor - 1  # 关键点2 减去一个像素
            y2 = rect[1] + neighbor - 1
            if x2 > x + w:
                x2 = x + w
            if y2 > y + h:
                y2 = y + h
            right_down = (x2, y2)
            cv2.rectangle(img, left_up, right_down, color, -1)  # 替换为为一个颜值值

    return img

if __name__ == '__main__':
    input_image_path = './test.jpg'
    output_image_path = './test_out.jpg'

    add_random_mosaic_to_image(input_image_path, output_image_path)

上述代码为输入图片随机在任意位置贴上常规马赛克和高斯马赛克。

示例原图:

python - 为图片增加随机马赛克-第0张图片

加上随机的正常马赛克图:

python - 为图片增加随机马赛克-第1张图片

加上随机的高斯马赛克图:

python - 为图片增加随机马赛克-第2张图片

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:python – 为图片增加随机马赛克

原文链接:https://www.stubbornhuang.com/3120/

发布于:2025年01月15日 14:18:15

修改于:2025年01月15日 14:18:15

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
ffmpeg将两个视频拼接成一左一右或者一上一下的视频
FFmpeg
下一篇
Python - 发送bark消息到服务器
Python
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号