STM32单片机上RGB数据转为JPEG格式办法

发布时间:2023-10-10  

【1】项目背景

在STM32单片机上调用OV系列摄像头读取实时视频,然后对数据进行分析,分析之后再通过WIFI或者4G网络传输给服务器保存和显示。因为处理数据时,采用的是RGB源数据格式,处理之后的 数据需要通过网络传输,由于RGB源数据占用内存很大,对接下来的网络传输非常不力,严重影响传输速度。所以,需要先将RGB数据压缩成JPG格式再进行传输。


【2】常用的JPGE压缩库

(1)libjpeg库

libjpeg是一个用于处理JPEG图像格式的库。它提供了一组用于压缩和解压缩JPEG图像的函数,可以在各种操作系统上使用。libjpeg是由Independent JPEG Group开发的自由软件,其主要功能包括压缩和解压缩JPEG图像、转换JPEG图像格式以及进行基本颜色空间转换等。许多图像处理应用程序都使用libjpeg库来实现JPEG图像的读取、写入和处理等功能。


(2)TinyJPEG库

TinyJPEG是一个用于处理JPEG图像格式的小型库。它是在libjpeg库的基础上进行了简化和优化,以实现更高效的JPEG压缩和解压缩。TinyJPEG库的主要特点是代码量小、易于集成和使用,并且可以在嵌入式设备等资源受限的环境中运行。由于其小巧、快速和可移植性等特点,TinyJPEG库通常用于低功耗设备、嵌入式系统、移动应用程序等领域,以提供高质量的图像处理能力。


【3】示例代码

TinyJPEG库是一款轻量级的JPEG压缩库,适用于资源受限的嵌入式系统。下面采用STM32F103ZET6作为实验对象,STM32F103ZET6 是一款基于ARM Cortex-M3内核的微控制器,具有高性能和低功耗的特点。


将RGB565格式的图像压缩成JPEG格式,需要经过以下几个步骤:


将RGB565数据转换为YUV420格式数据。由于JPEG压缩算法基于YUV颜色空间,因此需要先将RGB565数据转换为YUV420格式数据,以便后续处理。

对YUV420数据进行预处理。在进行JPEG压缩前,需要对YUV420数据进行预处理,包括分块、离散余弦变换(DCT)、量化等操作。

进行霍夫曼编码。将预处理后的数据进行霍夫曼编码,以便能够更好地压缩数据。

生成JPEG文件。将编码后的数据写入到JPEG文件中,即可生成JPEG格式的图像数据。

以下是一个示例代码,使用TinyJPEG库将RGB565格式的图像压缩成JPEG格式:


#include "tiny_jpeg.h"

#define WIDTH  320

#define HEIGHT  240

#define RGB_BUF_SIZE   (WIDTH * HEIGHT * 2)

#define JPEG_BUF_SIZE  (WIDTH * HEIGHT)

uint8_t rgb_buf[RGB_BUF_SIZE];

uint8_t jpeg_buf[JPEG_BUF_SIZE];

int main(void)

{

  // 初始化摄像头和LCD等设备

  // 获取RGB565格式的图像数据

  get_rgb_data(rgb_buf, RGB_BUF_SIZE);

  // 将RGB565格式的图像数据转换为YUV420格式数据

  uint8_t yuv_buf[WIDTH * HEIGHT * 3 / 2];

  rgb_to_yuv(rgb_buf, WIDTH, HEIGHT, yuv_buf);

  // 对YUV420格式数据进行预处理

  uint8_t dct_buf[JPEG_BUF_SIZE];

  preprocess(yuv_buf, WIDTH, HEIGHT, dct_buf);

  // 进行霍夫曼编码

  int jpeg_size = encode(dct_buf, WIDTH, HEIGHT, jpeg_buf, JPEG_BUF_SIZE);

  // 将压缩后的JPEG数据写入到SD卡或其他存储介质中

  write_jpeg_to_sd_card(jpeg_buf, jpeg_size);

  while (1) {

    // 主循环,处理其他任务

   }

}


TinyJPEG库是一款通用的JPEG压缩库,使用时需要根据具体情况进行修改和适配。在具体实现时,还需要考虑图像大小、压缩比率、编码质量等因素,以便更好地满足实际需求。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>