Python+OpenCV将彩图数据转成数组供LCD显示
TFTLCD显示彩图的原理相信大家都很熟悉,基本上是采用MCU将图像数据通过SPI、IIC、8080或者6800时序送到LCD的驱动控制器,LCD控制器将驱动显示出彩图。那么从信号源的角度来讲,图像数据的来源变得很重要。行业内比较普遍的做法是在PC端将要显示的jpg或者其他格式的图片文件,通过自己编写的小软件转换成数据文件,比如使用在c或者c++的数组文件。然后再用于其他的编程。采用不同语言的编程,程序的规模和难度不一。合理采用工具,可以大大减少编程的难度。
本文介绍一种采用Python和Opencv的方法将图像文件转成数据文件,共c或者c++编程使用。当然,掌握这个方法后也可以按照自己的需求编写你想要的文件格式。
TFTLCD采用的数据格式介绍
TFTLCD如何根据图像颜色数据不同而现实不同的色彩呢?这里介绍一下用的比较多的两种格式,一是RGB565,第二是RGB888。
顾名思义,RGB565就是表示,LCD上一个像素点的颜色有5+6+5=16bits表示,其中红色、绿色、蓝色三分量分别由5bits,6bits,5bits来表示,那么一共可以显示的颜色有65536种。RGB888也是同理。
图像在PC的存储方式很多,文件格式各不相同,但是通过解码,基本还原为RGB三种分量,我们采用合适的工具将数据提取出来,然后按照要去重新排列。这样就得出要的数据了,最后将数据转成你需要的格式即可。
转换过程
导入需要的库
import cv2
import numpy as np
from matplotlib import pyplot as plt
第一个是加载cv2库,主要是处理图像数据的读取等,第二个是numpy库,主要是进行矩阵操作等,后面的plt是画图显示用。
首先读入需要转换的图像,以读取彩图的形式读取并获得图像的行列数。
im = cv2.imread('1.jpg', cv2.IMREAD_COLOR)
rows, cols, _ = im.shape
然后建立红绿蓝三组空数组及要目标数组,尺度大小和图像一样,注意是因为要进行移位操作,因此把数据放大,数据类型选择uint32。
将图像数据的三个分量分别读出来。要注意的是opencv读取图像的次序是蓝绿红方式,即0通道时是蓝色数据,1通道时绿色数据,2通道时红色数据。