使用Python将OV7725的RGB565图像数据转换为jpg图像

第一步,在单片机上添加如下代码

使用Python将OV7725的RGB565图像数据转换为jpg图像_第1张图片

 在读取摄像头数据的时候,加入下面这段代码

UART_Send_Data(UART4,color1);//通过串口发送RGB565的高八位
UART_Send_Data(UART4,color2);//通过串口发送RGB565的低八位

第二步,使用串口调试软件,接收数据

注意需要打开HEX显示

使用Python将OV7725的RGB565图像数据转换为jpg图像_第2张图片

一共会接收320*240*2字节数据,速度会有点慢,接收速度根据波特率大小

第三步,将接收的数据保存为文件

我这里建议,手动复制。

首先在D盘下新建一个txt文件,并命名为1.txt

使用Python将OV7725的RGB565图像数据转换为jpg图像_第3张图片

 然后串口调试软件接收的数据,复制刚才新建的1.txt文件文件中,保存文件使用Python将OV7725的RGB565图像数据转换为jpg图像_第4张图片

第四步,新建Python程序并输入如下内容

from PIL import Image,ImageDraw


#定义图像大小为320*240
w = 320     #宽
h = 240     #高
#源文件路径,可以根据自己的情况进行修改
FileAdd = "D:\\1.txt"
#用于转换的
HEX = {}
RGB = []

#十六进制字符转数字
def Hex_To_Dec(hex):
    if hex == '0':
        re = 0
    elif hex == '1':
        re = 1
    elif hex == '2':
        re = 2
    elif hex == '3':
        re = 3
    elif hex == '4':
        re = 4
    elif hex == '5':
        re = 5
    elif hex == '6':
        re = 6
    elif hex == '7':
        re = 7
    elif hex == '8':
        re = 8
    elif hex == '9':
        re = 9
    elif hex == 'A':
        re = 10
    elif hex == 'B':
        re = 11
    elif hex == 'C':
        re = 12
    elif hex == 'D':
        re = 13
    elif hex == 'E':
        re = 14
    elif hex == 'F':
        re = 15
    else :
        return (100)
    return (re)
#main()
if __name__ == "__main__":
    f = open(FileAdd,encoding = "utf-8")#打开文件
    print("正在合成来自" + FileAdd + "的图像数据,合成为" + str(w) + "*" + str(h) + "的图像")
    x = 0
    z = 0
    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
        HEX[x] = ((Hex_To_Dec(f1) << 12) + (Hex_To_Dec(f2) << 8) + (Hex_To_Dec(f3) << 4) + Hex_To_Dec(f4))
        if z >= (w * h * 6):
            break
    f.close()#关闭文件
    x = 0
    for x in range(len(HEX)):#将RGB565转为RGB888
        r = (((HEX[x] & 0xF800) >> 8))
        g = (((HEX[x] & 0x7E0 ) >> 3))
        b = (((HEX[x] & 0x1F) << 3))
        rgb = (r, g, b)
        RGB.append(rgb)
   
    #print(RGB)
    #print(HEX)

    image = Image.new('RGB', (w, h), (255, 255, 255))#创建新图片对象
 
    draw = ImageDraw.Draw(image)# 创建Draw对象用于绘制新图:
 
    x = 0
    y = 0
    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('D:\\2.jpeg', 'jpeg')#将转换后的图像保存到D盘中
    image.show()#查看图像

第五步,开始运行Python程序

之后Python会读取1.txt中内容,把它转换成图像并自动打开图像

我的目前ov7725不在身边,所以显示出来的图像是空白的。

使用Python将OV7725的RGB565图像数据转换为jpg图像_第5张图片

将保存刚才处理过的图像保存到D盘中

 

使用Python将OV7725的RGB565图像数据转换为jpg图像_第6张图片

补充:Python将会用到PIL库,在使用这个程序之前,请添加此库,否则将会报错

添加PIL库请参考如下方法

win+r,输入cmd,回车

使用Python将OV7725的RGB565图像数据转换为jpg图像_第7张图片

 之后会输入如下内容

pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pillow

使用Python将OV7725的RGB565图像数据转换为jpg图像_第8张图片

 然后回车

 显示Successfully,就表示安装成功了

你可能感兴趣的:(单片机,嵌入式硬件,python)