基于FPGA的串口传图SRAM缓存VGA显示( 三 )


结果分析
图片选择友晶资料盘里的图片,分辨率640*480,将其转灰度图用于实验 。
仿真就不放了,直接放上板验证:
用正点原子的XCOM串口软件发送bmp图片,实验结果如下:
图像上下反转了,而且左右也有错位,说明直接使用串口软件发送bmp文件是不对的 。
网上查了很多FPGA串口传图的代码,他们都喜欢自己写一个串口程序来传图,但我太菜了,不会写,他们的程序我也不好用,因为我要传灰度图 。
解决方法:将图片转存为hex文件,然后用串口软件发送hex文件 。
方式1:
gray = imread('gray_640_480.bmp');f = fopen('gray_640_480.hex', 'w+');for y = 1:480for x = 1:640fprintf(f, '%x', gray(y, x));endendfclose(f);
方式2:+
import cv2 as cvgray = cv.imread('gray_640_480.bmp', cv.IMREAD_GRAYSCALE)f = open("gray_640_480.hex", "w+")for y in range(0, 480):for x in range(0, 640):# 记得去掉0x开头hex_data = http://www.kingceram.com/post/hex(gray[y][x])[2:4]f.write(hex_data)f.close()
执行上述代码后,只是将bmp文件转化为了hex文本,其内容还是ASCII字符,2位十六进制数对应1字节,此时的hex文件大小(600kb)是bmp文件大小(300kb)的2倍 。
接下来需要执行最后一步:以十六进制编码保存文件,我用的是编辑器,打开hex文件,选择文件->以…编码保存->十六进制
执行完最后一步,hex文件大小变成300kb了,转hex完毕 。
之后再用串口软件发送该hex文件即可,实验结果如下,与原图一致: