【代码】伪标签图像随机生成

news2024/11/19 11:22:11

这段代码将生成2-4个大小不同的圆形和1-2个大小不同的椭圆形,并确保它们之间以及与背景边界之间不会发生重叠
限制圆形的半径不超过150,第13行

import cv2
import random
import os
'''
这段代码将生成2-4个大小不同的圆形和1-2个大小不同的椭圆形,并确保它们之间以及与背景边界之间不会发生重叠
限制圆形的半径不超过150,第13行
'''
def generate_non_overlapping_shapes(bg_width, bg_height, min_size, max_size, num_circles, num_ellipses):
    shapes = []
    # 生成圆形
    for _ in range(num_circles):
        while True:
            radius = random.randint(min_size, min(max_size, 150))  # 确保半径不大于200
            center = (random.randint(radius, bg_width - radius), random.randint(radius, bg_height - radius))
            overlap = False
            for s in shapes:
                s_radius = s['size'][0] if 'size' in s else s['radius']
                if ((center[0] - s['center'][0]) ** 2 + (center[1] - s['center'][1]) ** 2) < (radius + s_radius) ** 2:
                    overlap = True
                    break
            if not overlap:
                shapes.append({'center': center, 'radius': radius})
                break
    # 生成椭圆形
    for _ in range(num_ellipses):
        while True:
            size = (random.randint(min_size, max_size), random.randint(min_size, max_size))
            center = (random.randint(size[0]//2, bg_width - size[0]//2), random.randint(size[1]//2, bg_height - size[1]//2))
            angle = random.randint(0, 360)
            overlap = False
            for s in shapes:
                s_radius = s['size'][0] if 'size' in s else s['radius']
                # Simplified check for overlap: consider the ellipse as a circle with radius equal to the maximum of its half-axes
                max_radius = max(size) // 2
                if ((center[0] - s['center'][0]) ** 2 + (center[1] - s['center'][1]) ** 2) < (max_radius + s_radius) ** 2:
                    overlap = True
                    break
            if not overlap:
                shapes.append({'center': center, 'size': size, 'angle': angle})
                break
    return shapes

# 新增一个函数来保存生成的图片
def save_image(image, directory, base_filename, image_index):
    if not os.path.exists(directory):
        os.makedirs(directory)
    filename = f"{base_filename}_{image_index:03d}.jpg"
    filepath = os.path.join(directory, filename)
    cv2.imwrite(filepath, image)
    print(f"Saved: {filepath}")

# 定义图片保存路径和基础文件名
output_directory = 'datasets/random_generate_images'
base_filename = 'random_generate_image'

# 指定要生成的图片数量
number_of_images = 1500  # 生成5张图片,可以根据需要修改这个数量

# 加载指定的背景图片模板
background_template = cv2.imread('background.jpg')

# 检查图片是否成功载入
if background_template is None:
    raise FileNotFoundError("指定的图片 background.jpg 没有找到。")
# 获取背景图片的尺寸信息
bg_height, bg_width = background_template.shape[:2]

# 生成指定数量的图片
for img_index in range(number_of_images):
    background = background_template.copy()  # 为每张图片复制一份背景模板
    num_circles = random.randint(2, 4)
    num_ellipses = random.randint(1, 2)
    shapes = generate_non_overlapping_shapes(bg_width, bg_height, 10, 256, num_circles, num_ellipses)
    for shape in shapes:
        if 'radius' in shape:
            cv2.circle(background, shape['center'], shape['radius'], (190, 190, 190), -1)
        else:
            cv2.ellipse(background, shape['center'], shape['size'], shape['angle'], 0, 360, (190, 190, 190), -1)
    # 保存生成的图片
    save_image(background, output_directory, base_filename, img_index)
    
# 如果你想在保存后显示最后一张图片,取消下面的注释
# cv2.imshow('Background with Shapes', background)
# cv2.waitKey(0)
# cv2.destroyAllWindows()

示例:

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1525528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第八天|344.反转字符串、541. 反转字符串II、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串

题目&#xff1a;344.反转字符串 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:344.反转字符串 题目链接&#xff1a;力扣题目链接 图释&#xff1a; // 反转字符串 void reverseString(vector<char>& s) {// 直接使用反转的库函数 reverserev…

数字化转型之于国家:为三驾马车更新马达

随着国民经济和社会发展第十四个五年规划的开启&#xff0c;中国也进入了全面建设社会主义现代化国家的新发 展阶段&#xff0c;未来要在坚持“创新、协调、绿色、开放、共享”的新发展理念下&#xff0c;在质量效益明显提升的基础上实 现经济持续健康发展。持续的发展意味着…

水库大坝安全监测中需要注意的事项

随着经济和社会的发展&#xff0c;水资源的需求也在不断增加。因此&#xff0c;建设水库已成为保障水资源的主要方式之一。然而&#xff0c;随着水库规模的增大和工程的复杂性的增加&#xff0c;水库大坝的安全问题也日益引起重视。为此&#xff0c;需要对水库大坝进行安全监测…

【爬虫】– 抓取原创力文档数据

使用RPA工具&#xff0c;实现针对于原创力中不可下载文档的抓取&#xff0c;可延用于其他类似文库 1 使用工具、环境 影刀RPA、WPS Office、谷歌浏览器&#xff08;非指定&#xff09; 2 代码流程 3 关键点 此方案只适合抓取非VIP即可预览全文的文档&#xff0c;抓取下来的数…

计算机网络 谢希仁(001-1)

计算机网络-方老师 总时长 24:45:00 共50个视频&#xff0c;6个模块 此文章包含1.1到1.4的内容 简介 1.1计算机网络的作用 三网融合&#xff08;三网合一&#xff09; 模拟信号就是连续信号 数字信号是离散信号 1.2互联网概述 以前2兆带宽就要98 现在几百兆带宽也就几百块 …

海川润泽AI机器视觉仪系列产品,助推“人工智能+”打开新质生产力的大门

3月5日&#xff0c;第十四届全国人民代表大会第二次会议开幕。国务院总理李强在政府工作报告&#xff0c;提出大力推进现代化产业体系建设&#xff0c;加快发展新质生产力。深入推进数字经济创新发展&#xff0c;制定支持数字经济高质量发展政策&#xff0c;积极推进数字产业化…

AI+权重衰退

AI权重衰退 1权重衰退2代码实现 2丢弃法 1权重衰退 AI权重衰退是指在人工智能&#xff08;AI&#xff09;领域中的一种技术或方法&#xff0c;用于训练机器学习模型时对权重进行惩罚或调整&#xff0c;以避免过拟合现象的发生。 在机器学习中&#xff0c;过拟合是指模型在训练…

Debug追踪

2.2 Debug追踪 使用IDEA的断点调试功能&#xff0c;查看程序的运行过程 在有效代码行&#xff0c;点击行号右边的空白区域&#xff0c;设置断点&#xff0c;程序执行到断点将停止&#xff0c;我们可以手动来运行程序 点击Debug运行模式 程序停止在断点上不再执行&#xff0c…

C/C++程序设计实验报告3 | 数组实验

本文整理自博主本科大一《C/C程序设计》专业课的课内实验报告&#xff0c;适合C语言初学者们学习、练习。 编译器&#xff1a;gcc 10.3.0 ---- 注&#xff1a; 1.虽然课程名为C程序设计&#xff0c;但实际上当时校内该课的内容大部分其实都是C语言&#xff0c;C的元素最多可能只…

多重背包(二进制优化)

[Acwing 5.多重背包] 有 N N N 种物品和一个容量是 V V V 的背包。 第 i i i 种物品最多有 s i s_i si​ 件&#xff0c;每件体积是 v i v_i vi​&#xff0c;价值是 w i w_i wi​。 求解将哪些物品装入背包&#xff0c;可使物品体积总和不超过背包容量&#xff0c;且…

BUUCTF-----[GXYCTF2019]禁止套娃

题目 目录扫描&#xff0c;扫到.git泄露&#xff0c;使用工具查看到index.php的源码 <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){if (!preg_match(/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i,…

出海品牌必备指南:海外网红营销5大底层逻辑解析

随着全球化的推进&#xff0c;品牌出海已经成为许多企业拓展市场的重要策略之一。在这个过程中&#xff0c;海外网红营销成为品牌吸引目标受众、提升知名度的有效工具。然而&#xff0c;要在海外市场取得成功&#xff0c;并不仅仅是找准网红合作伙伴&#xff0c;更需要深入了解…

全新2024快递平台系统 独立版快递信息查询小程序源码 cps推广营销流量主+前端 同城快递平台

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 快递代发快递代寄寄件小程序可以对接易达云洋一级总代 快递小程序&#xff0c;接入云洋/易达物流接口&#xff0c;支持选择快递公司&#xff0c;三通一达&#xff0c;极兔&#xff0c…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Counter)

计数器组件&#xff0c;提供相应的增加或者减少的计数操作。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 接口 Counter() 从API version 9开始&#xff0c;该接口…

GIT共享 跨仓库操作 子模块

初级代码游戏的专栏介绍与文章目录-CSDN博客 有些文件想在多个项目共享&#xff0c;但是又不能放在一个GIT仓库里&#xff0c;这要用到子模块&#xff08;submodule&#xff09;&#xff0c;说难不难&#xff0c;就是有些细节要注意。 不过说真的&#xff0c;共享向来不是个好主…

山景BP1048 升级狗烧写

1.打开MVAssistant_BP10xx工具&#xff0c;在芯片型号栏中选择B1X系列。 2.模式选择 选 M2.仅升级Flash SH(可选) 3 .Code数据选择SDK编译好的bin文件 4.const数据选择编译好的提示音bin文件。 5.点击升级狗下载。 6. 如下图所示&#xff0c;出现提示为正在给升级狗正在下载程…

Android中Gradle的生命周期详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 Gradle的生命周期分为三个阶段&#xff1a; 初始化阶段定义阶段(配置阶段)执行阶段 第…

什么是RAG?

此为看完视频What is Retrieval-Augmented Generation (RAG)?后的笔记。 视频很intuitive&#xff0c;上面这张截屏包含了所有RAG的要点。 RAG是一个框架&#xff0c;解决了LLM的2个问题&#xff1a; No source。没有来源&#xff0c;没有证据来支持或证明你的观点。过时。…

成都规模最大的直播基地在哪里

天府锋巢直播产业基地&#xff0c;位于成都这座历史文化与现代气息交织的城市&#xff0c;不仅是成都规模最大的直播产业园&#xff0c;更是西南地区乃至全国范围内具有影响力的直播产业聚集地。在这里&#xff0c;直播产业与科技创新、文化创意、教育培训等多个领域深度融合&a…

【机器学习】无监督学习:解锁数据中的潜在结构与关系

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…