使用Python将OV7725的RGB565图像数据转换为jpg图像
使用Python将OV7725的RGB565图像数据转换为jpg图像
·
第一步,在单片机上添加如下代码
在读取摄像头数据的时候,加入下面这段代码
UART_Send_Data(UART4,color1);//通过串口发送RGB565的高八位
UART_Send_Data(UART4,color2);//通过串口发送RGB565的低八位
第二步,使用串口调试软件,接收数据
注意需要打开HEX显示
一共会接收320*240*2字节数据,速度会有点慢,接收速度根据波特率大小
第三步,将接收的数据保存为文件
我这里建议,手动复制。
首先在D盘下新建一个txt文件,并命名为1.txt
然后串口调试软件接收的数据,复制刚才新建的1.txt文件文件中,保存文件
第四步,新建Python程序并输入如下内容
from PIL import Image,ImageDraw
import os
#定义图像大小
w = 320 #宽
h = 240 #高
FileAdd = os.getcwd() + "\\1.txt"#源文件路径
OutFile = os.getcwd() + "\\out.jpeg"#输出文件名称
f = open(FileAdd,encoding = "utf-8")#打开文件
print("正在合成来自" + FileAdd + "的图像数据,合成为" + str(w) + "*" + str(h) + "的图像")
Hex_To_Dec = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}
z = 0
RGB = []
for x in range(w * h * 60):#将文本型十六进制,转为数值型十六进制
f.seek(z+0,0)
f1 = f.read(1)
f.seek(z+1,0)
f2 = f.read(1)
f.seek(z+3,0)
f3 = f.read(1)
f.seek(z+4,0)
f4 = f.read(1)
z = z + 6
s = (Hex_To_Dec[f1] << 12) + (Hex_To_Dec[f2] << 8) + (Hex_To_Dec[f3] << 4) + Hex_To_Dec[f4]
#将RGB565转为RGB888
r = (s & 0xF800) >> 8
g = (s & 0x7E0 ) >> 3
b = (s & 0x1F) << 3
RGB.append((r, g, b))
if z >= (w * h * 6):
break
f.close()#关闭文件
image = Image.new('RGB', (w, h), (255, 255, 255))#创建新图片对象
draw = ImageDraw.Draw(image)# 创建Draw对象用于绘制新图:
i= 0
for y in range(h):# 填充每个像素并对对应像素填上RGB值:
for x in range(w):
draw.point((x, y), fill=RGB[i])
i = i + 1
image.save(OutFile, 'jpeg')#保存文件
image.show()#查看图像
第五步,开始运行Python程序
之后Python会读取当前目录下1.txt中内容,把它转换成图像并自动打开图像
将保存刚才处理过的图像保存到当前目录下
补充:Python将会用到PIL库,在使用这个程序之前,请添加此库,否则将会报错
添加PIL库请参考如下方法
win+r,输入cmd,回车
之后会输入如下内容
pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pillow
然后回车
显示Successfully,就表示安装成功了
开源仓库:

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)