opencv项目之画图(草原上的狼)

2023-11-02 18:30
文章标签 项目 opencv 画图 草原

本文主要是介绍opencv项目之画图(草原上的狼),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个是编了一个夜晚草原上的狼。
结果图在最后。

import cv2
import numpy as np
import random
import time
import math#这是图片的大小
sx = 1000
sy = 1200
#窗口函数
def show(img, name = "haigen",time = 10):# cv2.namedWindow(name, cv2.WINDOW_NORMAL)cv2.imshow(name,img)cv2.waitKey(time)#画星星
def star(fi):#根据fi的大小来画星星的个数while fi >= 0:#确定星星的位置x = random.randint(0, 350)y = random.randint(0,sy)dot = random.randint(0,1)#根究dot的大小判断星星的大小cv2.circle(board,(y,x),dot,(255,255,255),dot)fi -= 1#画闪烁得星星
def ran_star():list = []#每次闪烁得个数for i in range(35):x = random.randint(0, 350)y = random.randint(0, sy)dot = random.randint(0, 1)list.append((x,y,dot))#画星星for x, y, dot in list:cv2.circle(board, (y, x), dot, (255, 255, 255), dot)show(board,time=10)#然后把星星注释掉for x,y,dot in list:cv2.waitKey(20)cv2.circle(board, (y, x), dot, (0, 0, 0), dot)#画树
def tree(n,l,star, end, fi):val = int(n / 2)if(val < 1):val = 1cv2.line(board,star,end,[255,255,255],val)if n > 0:# 右分支偏转角度b = random.random() * 15 + 40 - fi * 3# 左分支偏转角度c = random.random() * 20 + 80 - fi#这里是计算出接下来的偏角b = -bc = -cc += b# 下一个分支的长度d = l * (random.random() * 0.25 + 0.75)x,y = end#计算出下一个右分支中点的位置,根据数学x1 = int(x + l * math.cos(math.radians(b)))y1 = int(y + l * math.sin(math.radians(b)))#画右分支tree(n - 1,d,end,(x1,y1), fi + 1)# 计算出下一个左分支中点的位置,根据数学x1 = int(x + l * math.cos(math.radians(c)))y1 = int(y + l * math.sin(math.radians(c)))#画左分支tree(n - 1, d, end, (x1, y1), fi + 1)#如果遍历的层数大于六层就开始画树上的花if(fi > 6):#画树上的花cv2.circle(board,end,4,[255,255,255],2)#画飞起的花
def flower():list = []#刚开始离树进的花,就少一点for i in range(30):x = random.randint(m - 400, m - 50)y = random.randint(n - 60, n + 200)ori = board[x - 1:x + 10, y - 1:y + 10].copy()list.append((x,y, ori))cv2.circle(board, (y + 4, x + 4), 4, (255, 255, 255), 2)#后面的花多一点啊for i in range(75):x = random.randint(m - 400, m)y = random.randint(n + 200, sy)ori = board[x - 1:x + 10, y - 1:y + 10].copy()list.append((x,y, ori))cv2.circle(board, (y + 4, x + 4), 4, (255, 255, 255), 2)return list#画动态花
def ran_flower():list = []#10多多动态花list = []#运的花不宜太多for i in range(20):x = random.randint(m - 400, m - 50)y = random.randint(n - 60, sy)#需要画一个ori,为了消掉飞起的花ori = board[x - 1:x + 10,y - 1:y + 10].copy()# show(ori, "ori1")# show(ori, "ori2")list.append((x,y,ori))#加4的原因是更好的消去运动的花cv2.circle(board, (y + 4, x + 4), 4, (255, 255, 255), 2)show(board,time=500)#消去运动的花for x,y,ori in list:board[x - 1: x + 10, y - 1 : y + 10] = ori[0:11,0:11]#画地上的花
def leaf():high = 10for i in range(8):#画树叶n = random.randint(0,sy)cv2.ellipse(board,(n - 8,sx - high), (20,4), 45, 0, 360,(255,255,255),-1)cv2.ellipse(board,(n + 8, sx - high),(20, 4), 130, 0, 360, (255, 255, 255), -1)#画茎秆cv2.ellipse(board, (n + 4, sx - high - 10), (30, 6), 105, 0, 180, (255, 255, 255), 2)#画花cv2.circle(board,(n + 7, sx - high - 35),6, (255,255,255),-1)cv2.circle(board, (n + 7, sx - high - 35), 8, (255, 255, 255), 2)#画地上的草
def grass():for i in range(200):#草的位置site = random.randint(0,sy)#草的躺的角度angle = random.randint(100,160)#草的高度h = random.randint(0,10)#画草cv2.ellipse(board, (site + 4, sx - h), (30, 6), angle, 0, angle, (255, 255, 255), -1)#画狼
def wolf():#导入狼的图片img = cv2.imread("C:/Test/top.jpg")#转换成HSV的格式,进行分离图像hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#cv2.inRange 进行图像的分离low = np.array([0,0,0])up = np.array([180,255,42])dst = cv2.inRange(hsv,low,up)#找到前景fg = cv2.cvtColor(dst,cv2.COLOR_GRAY2BGR)#找到图像的大小m,n = fg.shape[:2]#ORI 来寻找背景ori = board[ sx - m : sx, 700: 700 + n]mask = cv2.bitwise_not(dst)print("ori = ", ori.shape[:2])print("fg = ", fg.shape[:2])bg = cv2.add(fg,ori,mask=mask)#最后的图res = cv2.add(fg,bg)#加入原图像board[ sx - m : sx, 700: 700 + n] = res[0:m,0:n]show(res,"wolf")#函数开始的位置
#准备一个画板
board = np.ones((sx, sy, 3),np.uint8)
#画固定的星星
star(200)
#画月亮
cv2.circle(board, (100, 100), 50, (255, 255, 255), -1)
fi = 0
#树的起始位置
m = 1000
n = 200
#画树
tree(9,63, (n,m), (n, m - 60), fi)#递归7层
#画天上飞的花
flower()
#画花
leaf()
#画草地
grass()
#画狼
wolf()
#画闪烁的星星
while True:#每一次遍历一次就更新一次星星ran_star()#月亮要不断的刷新,否则会被星星干掉cv2.circle(board, (100, 100), 50, (255, 255, 255), -1)

图片
这是狼的图片
在这里插入图片描述
结果图

这篇关于opencv项目之画图(草原上的狼)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/332474

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca