OLED.C增加帧画面显示函数
static uint8_t s_frameBuf[1024];
static uint16_t s_bufIdx = 0;
void OLED_ShowPicture(const uint8_t *pic)
{
OLED_WriteCommand(0x20);
OLED_WriteCommand(0x02);
OLED_WriteCommand(0x21);
OLED_WriteCommand(0x00);
OLED_WriteCommand(0x7F);
OLED_WriteCommand(0x22);
OLED_WriteCommand(0x00);
OLED_WriteCommand(0x07);
for (uint16_t i = 0; i < 1024; i++)
OLED_WriteData(pic[i]);
}
void OLED_WriteBuffer(uint8_t data)
{
if (s_bufIdx < 1024)
s_frameBuf[s_bufIdx++] = data;
if (s_bufIdx == 1024) /* 满 1 帧 */
{
s_bufIdx = 0;
OLED_ShowPicture(s_frameBuf);
}
}
void OLED_ShowFrame(void)
{
OLED_ShowPicture(s_frameBuf);
s_bufIdx = 0;
}
.H增加声明
void OLED_ShowPicture(const uint8_t *pic);
void OLED_WriteBuffer(uint8_t data);
void OLED_ShowFrame(void); 工程添加USART_polling.C和.H程序
修改串口数据存入s_frameBuf帧画面数组,
电脑python、opencv环境
change_send.py
import cv2
import numpy as np
import serial
class UART(serial.Serial):
def __init__(self, port, baudrate, timeout):
try:
super().__init__(port=port, baudrate=baudrate, timeout=timeout)
except serial.serialutil.SerialException:
print('找不到串口!')
except Exception as result:
print("未知错误 %s" % result)
def send(self, byte):
super().write(chr(byte).encode('iso-8859-1'))
def receive(self):
return super().read()
def close(self):
super().close()
class ImageChange(object):
def __init__(self):
self.__img = np.zeros((64, 128), np.uint8)
self.__img_lst = []
def img_load(self, image):
self.__img = image
def img_read(self):
self.__img_lst = []
return self.__img
def change_threshold(self):
self.__img = cv2.cvtColor(self.__img, cv2.COLOR_BGR2GRAY)
self.__img = cv2.resize(self.__img, (128, 64))
ret, self.__img = cv2.threshold(self.__img, 127, 255, cv2.THRESH_BINARY)
return self.__img
def change_canny(self):
self.__img = cv2.cvtColor(self.__img, cv2.COLOR_BGR2GRAY)
self.__img = cv2.resize(self.__img, (128, 64))
self.__img = cv2.Canny(self.__img, 50, 100)
return self.__img
def __page_deal(self, pageNum):
data = 0
for x in range(128):
for y in range(8):
temp = self.__img[y + pageNum * 8][x]
if temp == 255:
data |= 0x01 << y
self.__img_lst.append(data)
data = 0
def get_data(self):
for i in range(8):
self.__page_deal(i)
return self.__img_lst
send.py
import change_send
import time
uart = change_send.UART('COM14', 500000, 1)
f = open('./video/badapple.txt', mode='r')
n = 0
time.sleep(1)
for line in f.readlines():
for i in line.replace('\n', '').split(','):
if i != '':
uart.send(int(i))
videoChange.py
import change_send
import cv2
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 128, 64)
video = cv2.VideoCapture('./video/badapple.mp4')
img = change_send.ImageChange()
videoLst = []
while video.isOpened():
flag, frame = video.read()
if not flag:
break
img.img_load(frame)
frame = img.change_threshold()
videoLst.append(img.get_data())
cv2.imshow('video', frame)
if cv2.waitKey(1) == ord('q'):
break
cv2.destroyAllWindows()
f = open('./video/badapple.txt', mode='w')
for piece in videoLst:
for data in piece:
f.write(str(data)+',')
f.write('\n')
print('Over!')
开源社区
