# OV7725ToJPG **Repository Path**: ahdun/OV7725ToJPG ## Basic Information - **Project Name**: OV7725ToJPG - **Description**: 基于Pyhton OV7725图像转jpg - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-02-01 - **Last Updated**: 2024-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 功能介绍: ``` 单片机通过串口发送的ov7725的RGB565图像数据,通过Python转换为jpg图像并进行预览 ``` ### 文件说明: ``` main.py 程序文件 1.txt 测试文件 ``` ### 开发环境: ``` Python3.6.8 ``` ### 教程: #### 第一步,在单片机上添加如下代码 ![c78af223d47f4d92874adde379ef48b5](png/c78af223d47f4d92874adde379ef48b5.png) 在读取摄像头数据的时候,加入下面这段代码 ```C UART_Send_Data(UART4,color1);//通过串口发送RGB565的高八位 UART_Send_Data(UART4,color2);//通过串口发送RGB565的低八位 ``` #### 第二步,使用串口调试软件,接收数据 **注意需要打开HEX显示** ![838812f614154db8ac3bec9f7093f51f](png/838812f614154db8ac3bec9f7093f51f.png) 一共会接收320x240x2字节数据,速度会有点慢,接收速度根据波特率大小 #### 第三步,将接收的数据保存为文件 我这里建议,手动复制。 首先在D盘下新建一个txt文件,并命名为1.txt ![4d5b425380d74d5896aef79cc556caef](png/4d5b425380d74d5896aef79cc556caef.png) 然后串口调试软件接收的数据,复制刚才新建的1.txt文件文件中,保存文件![87b81743e33d4e63b0c7ed6899b61ee6](png/87b81743e33d4e63b0c7ed6899b61ee6.png) #### 第四步,新建Python程序并输入如下内容 ```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中内容,把它转换成图像并自动打开图像 ![7edbb0937b064492be78260b7ca68647](png/7edbb0937b064492be78260b7ca68647.png) 将保存刚才处理过的图像保存到当前目录下 ![770f3eae2fdc4c95aa77a42aaa05da4c](png/770f3eae2fdc4c95aa77a42aaa05da4c.png) #### 补充:Python将会用到PIL库,在使用这个程序之前,请添加此库,否则将会报错 添加PIL库请参考如下方法 win+r,输入cmd,回车 ![968b8325ef7b4f42afac5a0aa79ea7f4](png/968b8325ef7b4f42afac5a0aa79ea7f4.png) 之后会输入如下内容 ```sh pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pillow ``` ![646c489ca55841d09b85b1752101baca](png/646c489ca55841d09b85b1752101baca.png) 然后回车 ![e84a7c5262e2406bb2e53ec22d5b0e27](png/e84a7c5262e2406bb2e53ec22d5b0e27.png) 显示Successfully,就表示安装成功了