标签:播放器 视频 arr OLED0561 img list 128 import
<iframe allowfullscreen="true" data-mediaembed="bilibili" id="6zTyGOq8-1643782279545" src="https://player.bilibili.com/player.html?aid=296139823"></iframe>使用OLED屏制作视频播放器
原帖地址:
使用OLED0561制作一个视频播放器 - CAWCAW的意思是鸦叫声,Guaik的Logo是一只长相奇特的乌鸦。https://caw.guaik.io/d/22-oled0561
在学习完USART串口,I2C控制OLED显示屏后想做个小作品练练手,一开始想着转码一个电影用OLED播放下看看,写着写着就跑题了,其实做一个能播放摄像头视频数据的播放器也不错。
import cv2 as cv
from PIL import Image
import numpy as np
import serial
import time
def convert2bitmap(img):
# 将图像转换成灰度图
black_img = img.convert("L")
bdata_list = list(black_img.getdata())
threshold = 128
# 将灰度图转换为单色位图,值小于128的转换为0,其他的转换为1
bvalue_list = [0 if i < threshold else 1 for i in bdata_list]
arr = np.array(bvalue_list)
# 将数组数据转换成64行128列的矩阵
arr = arr.reshape((64, 128))
data = []
# 转换成OLED0561可显示的数据(左上到右下,高位在下边)
for m in range(0, 8):
for i in range(0, 128):
col = arr[:, i]
a = 0
for j in range(0, 8):
a |= col[m*8+j] << j
data.append(a)
return data
def worker():
# 初始化串口(串口号需要根据实际值进行修改)
s = serial.Serial("COM10", 115200)
# 打开默认摄像头设备
capture = cv.VideoCapture(0)
while True:
# 读取摄像头一帧数据
ret, frame = capture.read()
# 将图像设置为128 * 64大小(OLED屏幕为128 * 64)
frame = cv.resize(frame, (128, 64))
# 将帧数据转换成图像数据
img = Image.fromarray(frame)
# 将图像数据转换成OLED
bitmap = convert2bitmap(img)
# 将数据写入串口
s.write(bitmap)
# 这里加一些延迟,不然OLED屏幕闪的厉害
time.sleep(0.3)
cv.imshow("frame", frame)
# 延迟1ms后切换到下一帧图像
cv.waitKey(1)
if __name__ == "__main__":
worker()
开源地址
Gitee:
https://gitee.com/GuaikOrg/oled_player
Github:
https://github.com/GUAIK-ORG/oled_player
在主目录下
video.py
文件为视频采集和转码并通过串口发送给stm32的上位机程序在
build
目录下的build_pro.hex
可烧录到stm32中。
标签:播放器,视频,arr,OLED0561,img,list,128,import 来源: https://blog.csdn.net/m0_64113647/article/details/122769313
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。