给杰哥使用python和opencv做一个视频取模器
杰哥提出一个需求,想在他的屏幕上显示开机动画,然后给了我一段视频:
对于杰哥的需求我当然熬夜也要完成,十分钟后:
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文本中,完了粘贴到代码编辑器中使用。
最终实现的效果:
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。