我用python生成了一亿棵不同的圣诞树 | 使用Python代码自动生成圣诞树轮廓

news2024/11/24 20:57:05

圣诞将至,这次来试试用Python代码过圣诞节把~挑战生成一亿棵圣诞树。

文章目录

  • 前言
  • 一、为什么能生成一亿棵圣诞树?
  • 二、怎么根据圣诞树图片生成对应的圣诞树轮廓
    • 1.读取圣诞树图片
    • 2.二值化圣诞树图片
    • 3.提取圣诞树图片轮廓
    • 4.显示圣诞树轮廓
  • 总结


前言

圣诞将至,这次来试试用Python代码过圣诞节把~挑战生成一亿棵圣诞树,其实是使用Python代码自动生成圣诞树轮廓。


一、为什么能生成一亿棵圣诞树?

大家可能会疑惑一亿棵圣诞树,计算机内存早就爆掉了,怎么可能啊。其实这里一亿棵树是指:代码可以根据你输入的圣诞树图片自动生成与之对应的圣诞树轮廓,图片有多少轮廓就有多少。

所以其实这是一篇使用Python代码自动生成圣诞树轮廓的文章
在这里插入图片描述

二、怎么根据圣诞树图片生成对应的圣诞树轮廓

1.读取圣诞树图片

下图是一张百度下载的圣诞树图片。
在这里插入图片描述

为了读取该图片,首先需要导入opencv库,然后使用cv2.imread(image)方法读取图片,image_path是图片的文件路径,并用img.shape获取图片的宽和高,主要代码如下(示例):

import cv2
# 读取图片
    img = cv2.imread(image_path)
    # 获取图片的宽和高
    img_size = img.shape
    img_w = img_size[1]
    img_h = img_size[0]

2.二值化圣诞树图片

首先使用cv2.cvtColor()把图片转换为灰度图,然后再用cv2.threshold()将图片二值化,主要代码如下(示例):

# 转换为灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 二值化
    ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

3.提取圣诞树图片轮廓

提取图片轮廓使用到了cv2.findContours()方法,但这里需要注意的是旧版本的opencv,该方法返回的是三个变量image, contours, hierarchy,而新版本的opencv则返回两个变量contours, hierarchy,因此这里需要根据自己的opencv版本进行代码的调整,否则就会报如下错误:
image, contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
ValueError: not enough values to unpack (expected 3, got 2)

主要代码如下(示例):

# 轮廓发现
    #image, contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

4.显示圣诞树轮廓

首先根据原来圣诞树图片的宽和高,创建空白的image对象,主要代码如下:

    # 图片img_blank大小为img_h*img_w,灰度值全为0,也就是黑色图像
    img_blank = numpy.zeros((img_h, img_w), dtype=numpy.uint8)
    img_blank = cv2.cvtColor(img_blank, cv2.COLOR_GRAY2BGR)

然后使用cv2.drawContours()方法,把圣诞树轮廓画在刚才创建的空白image对象上,最后使用cv2.imshow()方法显示最终画出来的圣诞树轮廓图片。

# 绘制轮廓
    cv2.drawContours(img_blank, contours, -1, (255, 255, 255), 3)
    # 显示图片
    cv2.imshow("img", img_blank)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

最终圣诞树轮廓的显示效果如下:
在这里插入图片描述


总结

圣诞树终于是画好了,从网上搜集资料、学习大神代码,到自己完成本篇文章,发现Python实现一个想法真的很快,前前后后也就一两个小时,非常适合快速实现小需求。

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

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

相关文章

数据结构作业——第十六周--排序

1 . 单选题 简单 5分 对整数序列(8,9,10,4,5,6,20,1,2)进行递增排序,采用每趟冒出一个最小元素的冒泡排序算法,需要进行的趟数是____…

重新定义“创新”,戴森以发明家精神引领科技突破

自创立以来,戴森坚持精益工程、寻求颠覆性解决方案,现已成为行业领先的全球科技公司。而在前沿产品背后,其创新理念、发明家精神为戴森一系列不可复制的核心科技和突破性产品奠定了基石。 2022年12月18日,第二届戴森科技节在深圳启…

【pyclipper+增材CAM】轮廓偏置

在增材打印CAM中,我们需要在切片得到的每层轮廓中规划生成打印路径。传统的三轴3D打印的常见填充方式有:轮廓平行填充和方向平行填充。其中轮廓平行填充主要是通过轮廓偏置实现的。 pyclipper安装使用 Python下安装pyclipper库,命令行输入p…

ZigBee环境配置与工程创建 -- IAR for 8051 8.10

IAR8.10版本的安装相对于10.30.1版本的安装要简单的过,同样是做ZigBee的裸机项目开发工具,10版本之前都是旧版的操作界面,如果后期运行协议栈的话可以适配Z-Stask2.5.1a版本 文章目录1. IAR环境安装2.IAR for 8051工程创建3.工程配置4.工程编…

星火计划学习笔记——Apollo决策规划技术详解及实现(以交通灯场景检测为例)

文章目录1. Apollo决策技术详解1.1 Planing模块运行机制1.2 Apollo决策功能的设计与实现1.2.1参考路径 Reference Line1.2.2 交规决策 Traffic rule process1.2.3 路径决策 Path decider1.2.4 速度决策 Speed decider1.2.5 Planing模块运行流程1.2.6 场景 Scenarios2. 交规决策…

AW EC2实例

Hello大家好,我们今天的课时内容是EC2。 EC2大家应该都是比较熟悉了,相信绝大部分人应该都用过。这部分涉及到的内容肯定是比较多的,希望大家对于一些基础的概念已经有所了解了,这个课时我和大家一起总结一下。 当然&#xff0c…

Canvas画布详解API代码演示

Canvas .<canvas>标签&#xff1a;画布标签&#xff0c;本身不具备绘图能力&#xff0c;可以通过脚本(JS)来实现 width:设置画布宽度&#xff0c;默认为300px height:设置画布高度&#xff0c;默认为150px Canvas API&#xff1a;提供通过JavaScript在<canvas>上绘…

【手把手】分布式定时任务调度解析之xxl-job

1、xxl-job好像很火&#xff1f; 在之前我写的讲解Quartz中有介绍过&#xff0c;Quartz有差不多二十年的历史&#xff0c;调度模型已经非常成熟了&#xff0c;而且很容易集成到Spring中去&#xff0c;用来执行业务任务是一个很好的选择。但是越早的设计存在的问题也越明显&…

自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 在无线通信系统中&#xff0c;由于多径效应及码间干扰的存在&#xff0c;信号误码率会升高。均衡技术是一种对抗码间干扰的重要技术。本文将介绍LMS均衡和RLS均衡两种均衡算法。在线性和非线性均…

[附源码]Python计算机毕业设计Django颐养天年辅助平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

水溶性CY7-COOH|Cas1353546-78-7|水溶CY7-羧酸

水溶性CY7-COOH|Cas1353546-78-7|水溶CY7-羧酸 CAS号&#xff1a;1628790-40-8&#xff08;氯化物&#xff09;、1628897-82-4&#xff08;不含阴离子&#xff09;、2241083-63-4&#xff08;内盐&#xff09; 外观&#xff1a; 绿色粉末 分子量&#xff1a;519.12 分子式&…

sa-token进阶

介绍sa-token实际应用的高阶用法。 文章目录路由拦截鉴权绑定角色权限标识角色校验/权限校验测试角色标识测试权限标识进阶用法路由拦截鉴权 定义配置类SaTokenConfigure->实现WebMvcConfigurer&#xff0c;设置一个只对login请求放通的拦截器&#xff1a; Configuration …

商密SIG月度动态:文件加密支持SM4算法、Anolis 8.8将默认集成 | 龙蜥 SIG

商密软件栈 SIG 目标&#xff1a;基于Anolis Linux&#xff0c;在整个系统软件层面&#xff08;包括硬件&#xff0c;固件&#xff0c;bootloader&#xff0c;内核以及 OS&#xff09;实现以商密算法为主的全软件栈商密操作系统&#xff0c;结束一直以来商密软件生态碎片化的状…

B站李沐讲论文笔记Resnet

研一学生笔记&#xff0c;若有看官&#xff0c;笔下留情 作者 Kaiming He Xiangyu Zhang Shaoqing Ren&#xff08;在蔚来居然&#xff09; Jian Sun&#xff08;导师&#xff09; Microsoft Research 摘要&#xff1a; 我们提出一个网络&#xff0c;他可以简化网络的训练&…

【 Apifox】Apifox的前置操作与后置操作

Apifox官网地址&#xff1a;http://apifox.cn/a103abcc 文章目录一、断言二、提取变量三、数据库操作结语一、断言 后置操作支持添加断言&#xff0c;可对接口返回的数据&#xff08;或响应时间&#xff09;设置断言&#xff0c;判断是否符合预期。 设置断言&#xff1a; 运行…

与客户共解难题:BPM如何高标准国产化?

作为深耕中国本土BPM市场近二十年的老牌企业&#xff0c;上海斯歌已服务超过700家大型及超大型企业&#xff0c;在医药、汽车汽配、智能制造、房地产等行业积淀了深厚的服务能力&#xff0c;从始至终斯歌都在思考&#xff1a;如何以最佳的服务能力解决客户需求&#xff0c;成就…

Express 学习 - 02-中间件应用-urlencoded解析

请求模拟 什么是中间件&#xff1f; 中间件的本质是传递给express的一个回调函数&#xff1b;这个回调函数接受三个参数&#xff1a;请求对象&#xff08;request对象&#xff09;&#xff1b;响应对象&#xff08;response对象&#xff09;&#xff1b;next函数&#xff08;在…

用Rust写的Turbopack,比Vite快20倍?

日前&#xff0c;Vercel正式宣布推出新的包装工具Turbopack。Vercel声称这是用Rust编写的Webpack的继任者。在大型应用程序中&#xff0c;它的速度是Vite的10倍&#xff0c;是Webpack的700倍。维特的维护者对此表示怀疑。 Vercel发布新的开源工具Turbopack Vercel是Next。js框…

【数模】层次分析法

对于同一层次中的指标&#xff0c;通过两两比较&#xff0c;构造出判断矩阵&#xff0c;记为A。 aij表示因素i对因素j的重要性比较结果&#xff0c;可采用1-9的量化比例标度来反映其重要程度。 1&#xff1a;指标两个相比&#xff0c;A比B同等重要 3&#xff1a;指标两个相比…

E. Permutation Game(game)

Problem - E - Codeforces 两个玩家正在玩一个游戏。他们有一个整数1&#xff0c;2&#xff0c;...&#xff0c;n的排列组合&#xff08;排列组合是一个数组&#xff0c;其中从1到n的每个元素正好出现一次&#xff09;。这个排列组合没有按升序或降序排序&#xff08;即排列组合…