欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > python学opencv|读取图像(二十七)使用time()绘制弹球动画

python学opencv|读取图像(二十七)使用time()绘制弹球动画

2025/1/7 20:58:07 来源:https://blog.csdn.net/weixin_44855046/article/details/144958682  浏览:    关键词:python学opencv|读取图像(二十七)使用time()绘制弹球动画

【1】引言

前序已经学习了python+opencv画线段、圆形、矩形、多边形和文字的相关操作,具体文章链接包括且不限于:

python学opencv|读取图像(十八)使用cv2.line创造线段_cv2. 画线段-CSDN博客

python学opencv|读取图像(二十二)使用cv2.polylines()绘制多边形-CSDN博客

python学opencv|读取图像(二十五)使用cv2.putText()绘制文字进阶-垂直镜像文字-CSDN博客

在此基础上,我们更进一步,尝试绘制会动的弹球。

【2】技术分析

要想绘制弹球,首先要绘制圆形,所以要充分掌握绘制圆形的操作:

python学opencv|读取图像(二十)使用cv2.circle()绘制圆形_cv2.circle()函数-CSDN博客

在此基础上,我们需要通过使用循环函数来创建动态的圆心,比如常见的while()函数。

然后我们还要用time()函数还控制输出帧率,这样才能看到动画。

【3】代码测试

首先我们给出完整代码,然后再详细分析:

import cv2 as cv # 引入CV模块
import time #引入time模块
import numpy as np #引入numpy模块width,height=500,500 #输入画布大小
r=20 #设定圆心大小
x=r+200 #设定初始X轴坐标
y=r+200 #设定初始Y轴坐标
x_v=y_v=5 #设定初始移动速度while cv.waitKey(1)==-1:if x>0.85*(width) or x<0.15*(width): #在画布宽度(15%-85%)的区间内,弹球可直线运行x_v *=-1 #在画布宽度的15%或者85%的位置,弹球将反向直线运行if y > 0.85*(height) or y < 0.15*(height) : #在画布高度(15%-85%)的区间内,弹球可直线运行y_v *= -1 #在画布高度的15%或者85%的位置,弹球将反向直线运行x+=x_v #圆心x随着速度变化y+=y_v #圆心y随着速度变化canvas=np.ones((width,height,3),np.uint8)*255 #绘制画布cv.circle(canvas,(x,y),r,(255,0,0),-1) #绘制圆形#cv.imshow('qiuqiu', canvas)  # 在屏幕展示绘制圆形的效果time.sleep(1/1500) #每秒1500帧#cv.waitKey()  # 图像不会自动关闭
cv.destroyAllWindows()  # 释放所有窗口

首先是引入相关模块:

import cv2 as cv # 引入CV模块
import time #引入time模块
import numpy as np #引入numpy模块

然后约定好绘制圆形的初始数据:

width,height=500,500 #输入画布大小
r=20 #设定圆心大小
x=r+200 #设定初始X轴坐标
y=r+200 #设定初始Y轴坐标
x_v=y_v=5 #设定初始移动速度

然后使用while函数创造会反向的弹球:

while cv.waitKey(1)==-1:if x>0.85*(width) or x<0.15*(width): #在画布宽度(15%-85%)的区间内,弹球可直线运行x_v *=-1 #在画布宽度的15%或者85%的位置,弹球将反向直线运行if y > 0.85*(height) or y < 0.15*(height) : #在画布高度(15%-85%)的区间内,弹球可直线运行y_v *= -1 #在画布高度的15%或者85%的位置,弹球将反向直线运行x+=x_v #圆心x随着速度变化y+=y_v #圆心y随着速度变化canvas=np.ones((width,height,3),np.uint8)*255 #绘制画布cv.circle(canvas,(x,y),r,(255,0,0),-1) #绘制圆形#cv.imshow('qiuqiu', canvas)  # 在屏幕展示绘制圆形的效果time.sleep(1/1500) #每秒1500帧
cv.destroyAllWindows()  # 释放所有窗口

运行代码后获得的弹球动画为:

python+opencv简单弹球

【4】细节说明

在while()函数中,使用x>0.85*(width) or x<0.15*(width)和y > 0.85*(height) or y < 0.15*(height)约定了弹球活动的范围,这样可以在比较清晰的界面中看到球体反弹。

此外我们会发现没有使用cv2.imwrite()函数来保存图像,因为保存后的图像并不容易打开,所以暂时未启用这个函数。

【5】总结

掌握了python+opencv绘制简单弹球动画的技巧。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com