首先为自己设计一个专属图片,我设计的图片是这样的:
(自己感觉漂亮就行了)
设计图片代码:
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()
这里我试了半天,要实现图像反弹,我用的是写成函数形式,可能还有更好的算法(只能说我水平有限)
运行之后的效果
欢迎评论留言