opencv实现图片动态反弹

首先为自己设计一个专属图片,我设计的图片是这样的:

(自己感觉漂亮就行了)

设计图片代码:

import cv2
import numpy as np
height=400 #图像的行
width=400  #图像的列
image=np.zeros((height,width,3),np.uint8)
canvas=cv2.rectangle(image,(20,20),(380,380),(255,255,0),10)#绘制方形
line=cv2.line(image,(20,20),(380,380),(0,0,255),10)         #绘制线条
line2=cv2.line(image,(380,20),(20,380),(0,0,255),10)        
for i in range(40,200,20):
    line=cv2.rectangle(image,(i,i),(400-i,400-i),(255,255,0),8)
cv2.imshow("image",image)  #显示图片
cv2.waitKey()
cv2.destroyAllWindows()

然后将图片保存

代码:

cv2.imwrite("<图片路径>",image)

接下来就可以操作图片了,代码如下:

import cv2
import numpy as np
import time
def WC(n): #写成函数
    while cv2.waitKey(1)==-1:
        if n>-500:  #达到-500反弹
            p1 = np.float32([[0, 0], [cols - 1, 0], [0, row - 1]])
            p2 = np.float32([[0, n], [cols - 1, 0], [0, row - 1]])
            M = cv2.getAffineTransform(p1, p2)
            n -= 1
            dst1 = cv2.warpAffine(image, M, (cols, row))
            cv2.imshow("rotation", dst1)
            time.sleep(1 / 480) #速度参数可以设置,参数小速度越快
        else:
            return n #返回新的i值
if __name__=="__main__":
    image=cv2.imread("<图片路径>") #获取图片
    row=len(image)
    cols=len(image[0])
    center=(cols/2,row/2)
    i=1
    while cv2.waitKey(1)==-1:
        p1 = np.float32([[0, 0], [cols - 1, 0], [0, row - 1]])
        p2=np.float32([[0,i],[cols-1,0],[0,row-1]])
        M=cv2.getAffineTransform(p1,p2)
        dst1 = cv2.warpAffine(image, M, (cols, row))
        cv2.imshow("rotation", dst1)
        i+=1
        if i>=500:   #达到500反弹
            i=WC(i)  #实现反弹功能
        time.sleep(1 / 480)
    cv2.destroyAllWindows()

这里我试了半天,要实现图像反弹,我用的是写成函数形式,可能还有更好的算法(只能说我水平有限)

运行之后的效果

 欢迎评论留言

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值