杰哥提出一个需求,想在他的屏幕上显示开机动画,然后给了我一段视频:
mahajiemp4.gif

对于杰哥的需求我当然熬夜也要完成,十分钟后:

import cv2
import numpy as np
def save_img(array,data) :
    flag=0
    k=0x00
    print("{",file=data)
    for i in frame_array:#每行64个数字
        print(" ",file=data)
        #print(" ")#每行用@结尾做标记
        for j in i : #读取每行的元素到j中
            flag+=1 #计数标志位,到8指令
            if j==255: #j等于255 赋值为1
                j=1
            k=k<<1   #左移
            k=k|j    #或运算
            if flag ==8: #如果标志位为8,输出数组
                #print('0x%x' % k,end=',')
                print('0x%x' % k,file=data,end=',') 
                k=0x00
                flag=0
    print("},",file=data)
    

cap = cv2.VideoCapture('jie.mp4')#P 138   choose 46 img   one img have 256 data
page=0
data=open('test.txt','w+')
while(cap.isOpened()):
    page+=1
    ret, frame = cap.read()
    frame=cv2.resize(frame,(64,32))
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    ret,frame=cv2.threshold(frame,127,255,cv2.THRESH_BINARY_INV)
    cv2.imshow('frame',frame)
    if(page%1==0):
        frame_array = np.asarray(frame)
        save_img(frame_array,data)
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
'''

frame=cv2.imread('jie.png') #这里的代码用来转换一张图片
frame=cv2.resize(frame,(64,32))
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
ret,frame=cv2.threshold(frame,127,255,cv2.THRESH_BINARY_INV)
cv2.imshow('input_image', frame)
frame_array = np.asarray(frame)
data=open('test.txt','w+')
save_img(frame_array,data)
#cv2.waitKey(0)
cv2.destroyAllWindows()
'''

这是很简单的一个脚本,读取每帧图片,进行resize大小,二值化运算,转换为numpy数组,每八位数据合并为一位hex数据,一张大小为32*64的图片转换下来只有256位数据,轮训将所有的图片转换成功,放在临时的txt文本中,完了粘贴到代码编辑器中使用。
最终实现的效果:
mahajie.gif