衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32單片機(jī)上RGB數(shù)據(jù)轉(zhuǎn)為JPEG格式辦法

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-05-17 09:23 ? 次閱讀

【1】項(xiàng)目背景

STM32單片機(jī)上調(diào)用OV系列攝像頭讀取實(shí)時(shí)視頻,然后對(duì)數(shù)據(jù)進(jìn)行分析,分析之后再通過WIFI或者4G網(wǎng)絡(luò)傳輸給服務(wù)器保存和顯示。因?yàn)樘幚頂?shù)據(jù)時(shí),采用的是RGB源數(shù)據(jù)格式,處理之后的 數(shù)據(jù)需要通過網(wǎng)絡(luò)傳輸,由于RGB源數(shù)據(jù)占用內(nèi)存很大,對(duì)接下來的網(wǎng)絡(luò)傳輸非常不力,嚴(yán)重影響傳輸速度。所以,需要先將RGB數(shù)據(jù)壓縮成JPG格式再進(jìn)行傳輸。

【2】常用的JPGE壓縮庫(kù)

(1)libjpeg庫(kù)

libjpeg是一個(gè)用于處理JPEG圖像格式的庫(kù)。它提供了一組用于壓縮和解壓縮JPEG圖像的函數(shù),可以在各種操作系統(tǒng)上使用。libjpeg是由Independent JPEG Group開發(fā)的自由軟件,其主要功能包括壓縮和解壓縮JPEG圖像、轉(zhuǎn)換JPEG圖像格式以及進(jìn)行基本顏色空間轉(zhuǎn)換等。許多圖像處理應(yīng)用程序都使用libjpeg庫(kù)來實(shí)現(xiàn)JPEG圖像的讀取、寫入和處理等功能。

(2)TinyJPEG庫(kù)

TinyJPEG是一個(gè)用于處理JPEG圖像格式的小型庫(kù)。它是在libjpeg庫(kù)的基礎(chǔ)上進(jìn)行了簡(jiǎn)化和優(yōu)化,以實(shí)現(xiàn)更高效的JPEG壓縮和解壓縮。TinyJPEG庫(kù)的主要特點(diǎn)是代碼量小、易于集成和使用,并且可以在嵌入式設(shè)備等資源受限的環(huán)境中運(yùn)行。由于其小巧、快速和可移植性等特點(diǎn),TinyJPEG庫(kù)通常用于低功耗設(shè)備、嵌入式系統(tǒng)、移動(dòng)應(yīng)用程序等領(lǐng)域,以提供高質(zhì)量的圖像處理能力。

【3】示例代碼

TinyJPEG庫(kù)是一款輕量級(jí)的JPEG壓縮庫(kù),適用于資源受限的嵌入式系統(tǒng)。下面采用STM32F103ZET6作為實(shí)驗(yàn)對(duì)象,STM32F103ZET6 是一款基于ARM Cortex-M3內(nèi)核的微控制器,具有高性能和低功耗的特點(diǎn)。

將RGB565格式的圖像壓縮成JPEG格式,需要經(jīng)過以下幾個(gè)步驟:

  1. 將RGB565數(shù)據(jù)轉(zhuǎn)換為YUV420格式數(shù)據(jù)。由于JPEG壓縮算法基于YUV顏色空間,因此需要先將RGB565數(shù)據(jù)轉(zhuǎn)換為YUV420格式數(shù)據(jù),以便后續(xù)處理。
  2. 對(duì)YUV420數(shù)據(jù)進(jìn)行預(yù)處理。在進(jìn)行JPEG壓縮前,需要對(duì)YUV420數(shù)據(jù)進(jìn)行預(yù)處理,包括分塊、離散余弦變換(DCT)、量化等操作。
  3. 進(jìn)行霍夫曼編碼。將預(yù)處理后的數(shù)據(jù)進(jìn)行霍夫曼編碼,以便能夠更好地壓縮數(shù)據(jù)。
  4. 生成JPEG文件。將編碼后的數(shù)據(jù)寫入到JPEG文件中,即可生成JPEG格式的圖像數(shù)據(jù)。

以下是一個(gè)示例代碼,使用TinyJPEG庫(kù)將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等設(shè)備
?
  // 獲取RGB565格式的圖像數(shù)據(jù)
  get_rgb_data(rgb_buf, RGB_BUF_SIZE);
?
  // 將RGB565格式的圖像數(shù)據(jù)轉(zhuǎn)換為YUV420格式數(shù)據(jù)
  uint8_t yuv_buf[WIDTH * HEIGHT * 3 / 2];
  rgb_to_yuv(rgb_buf, WIDTH, HEIGHT, yuv_buf);
?
  // 對(duì)YUV420格式數(shù)據(jù)進(jìn)行預(yù)處理
  uint8_t dct_buf[JPEG_BUF_SIZE];
  preprocess(yuv_buf, WIDTH, HEIGHT, dct_buf);
?
  // 進(jìn)行霍夫曼編碼
  int jpeg_size = encode(dct_buf, WIDTH, HEIGHT, jpeg_buf, JPEG_BUF_SIZE);
?
  // 將壓縮后的JPEG數(shù)據(jù)寫入到SD卡或其他存儲(chǔ)介質(zhì)中
  write_jpeg_to_sd_card(jpeg_buf, jpeg_size);
?
  while (1) {
    // 主循環(huán),處理其他任務(wù)
   }
}

TinyJPEG庫(kù)是一款通用的JPEG壓縮庫(kù),使用時(shí)需要根據(jù)具體情況進(jìn)行修改和適配。在具體實(shí)現(xiàn)時(shí),還需要考慮圖像大小、壓縮比率、編碼質(zhì)量等因素,以便更好地滿足實(shí)際需求。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6043

    文章

    44621

    瀏覽量

    638618
  • STM32
    +關(guān)注

    關(guān)注

    2272

    文章

    10924

    瀏覽量

    357599
  • 攝像頭
    +關(guān)注

    關(guān)注

    60

    文章

    4865

    瀏覽量

    96319
  • RGB
    RGB
    +關(guān)注

    關(guān)注

    4

    文章

    801

    瀏覽量

    58717
  • JPEG
    +關(guān)注

    關(guān)注

    0

    文章

    66

    瀏覽量

    29999
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問怎么在單片機(jī)中把十進(jìn)制轉(zhuǎn)為十六進(jìn)制的格式

    大家好,幫幫忙,在單片機(jī)中想把十進(jìn)制X = 123456轉(zhuǎn)為十六進(jìn)制 X = 0x123456的格式,有什么方法嗎,或者有代碼例子嗎?謝謝!
    發(fā)表于 09-29 10:20

    什么是測(cè)試單片機(jī)控制單色屏幕的最佳辦法

    什么是測(cè)試單片機(jī)控制單色屏幕的最佳辦法?將視頻轉(zhuǎn)為圖像數(shù)據(jù)的matlab代碼該如何去編寫?
    發(fā)表于 09-24 09:13

    如何去實(shí)現(xiàn)stm32單片機(jī)上RGB565圖像簡(jiǎn)單處理呢

    如何去實(shí)現(xiàn)stm32單片機(jī)上RGB565圖像簡(jiǎn)單處理呢?有哪些步驟?
    發(fā)表于 11-19 08:07

    STM32 tjpgd軟件JPEG解碼后RGB888數(shù)據(jù)格式不對(duì)怎么解決

    STM32上面使用TJPGD解碼后,發(fā)現(xiàn)RGB888的數(shù)據(jù)格式單片機(jī)或常規(guī)的RGB格式順序有
    發(fā)表于 02-17 07:56

    請(qǐng)問有大佬知道怎么將FPGA通過TCP傳輸?shù)?b class='flag-5'>RGB888圖像數(shù)據(jù)通過labview顯示為圖像嗎,感謝感謝

    新手小白,已經(jīng)嘗試過一些將JPEG圖像格式數(shù)據(jù)轉(zhuǎn)為圖像的例子,用RGB888格式
    發(fā)表于 10-30 21:16

    JPEG圖像數(shù)據(jù)格式簡(jiǎn)明分析

    本文針對(duì)最常見的JPEG 圖像格式的壓縮數(shù)據(jù)進(jìn)行分析,描述了每一字節(jié)的數(shù)據(jù)所表示的含義,同時(shí)也介紹了JPEG 圖像
    發(fā)表于 09-18 11:05 ?16次下載

    STM32單片機(jī)通過SPI發(fā)送與接收FLSAH應(yīng)用案例

    使用STM32單片機(jī)通過SPI發(fā)送與接收FLSAH應(yīng)用案例,部分程序可以轉(zhuǎn)移到其他單片機(jī)上
    發(fā)表于 10-28 15:25 ?14次下載

    基于STM32單片機(jī)數(shù)據(jù)記錄裝置設(shè)計(jì)

    基于STM32單片機(jī)數(shù)據(jù)記錄裝置設(shè)計(jì)
    發(fā)表于 09-28 16:03 ?17次下載
    基于<b class='flag-5'>STM32</b><b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>數(shù)據(jù)</b>記錄裝置設(shè)計(jì)

    是否要從單片機(jī)轉(zhuǎn)為嵌入式Linux?

    作者:嵌入式老鳥火哥授權(quán)轉(zhuǎn)載于公眾號(hào)嵌入式老鳥的職場(chǎng)之道(ID: ict_embedded),有增加內(nèi)容和修改。最近很多童鞋投票并咨詢?nèi)绾螐?b class='flag-5'>單片機(jī)轉(zhuǎn)為嵌入式Linux開發(fā)。看來讀者圈中做單片機(jī)
    發(fā)表于 10-20 15:51 ?5次下載
    是否要從<b class='flag-5'>單片機(jī)</b><b class='flag-5'>轉(zhuǎn)為</b>嵌入式Linux?

    是否要從單片機(jī)轉(zhuǎn)為嵌入式Linux

    最近很多童鞋投票并咨詢?nèi)绾螐?b class='flag-5'>單片機(jī)轉(zhuǎn)為嵌入式Linux開發(fā)。看來讀者圈中做單片機(jī),RTOS的不少。盡管小編目前從事Linux/Android方面的嵌入式開發(fā)工作,但是讀書的時(shí)候也有5年左右單片
    發(fā)表于 11-13 20:51 ?11次下載
    是否要從<b class='flag-5'>單片機(jī)</b><b class='flag-5'>轉(zhuǎn)為</b>嵌入式Linux

    單片機(jī)串口發(fā)送數(shù)據(jù)格式_STM32實(shí)例——USART串口通信實(shí)驗(yàn)(一)

    Labview發(fā)送指令給STM32單片機(jī),控制單片機(jī)上LED燈亮滅。通信的基本概念我們知道 STM32F1 芯片內(nèi)含有非常多的通信接口,學(xué)習(xí)這些通信接口前,我們很有必要了解下通信的基.
    發(fā)表于 11-18 18:36 ?19次下載
    <b class='flag-5'>單片機(jī)</b>串口發(fā)送<b class='flag-5'>數(shù)據(jù)格式</b>_<b class='flag-5'>STM32</b>實(shí)例——USART串口通信實(shí)驗(yàn)(一)

    51單片機(jī)的printf等格式輸出函數(shù)

    在51單片機(jī)上使用printf函數(shù)、sprintf函數(shù)要注意以下幾點(diǎn):無符號(hào)16位數(shù)格式符用%d或者%u,千萬不能加字母“l(fā)”,否則會(huì)出錯(cuò)32位數(shù)據(jù)格式符必須加字母“l(fā)”,否則會(huì)出錯(cuò)8位數(shù)據(jù)格
    發(fā)表于 11-20 16:36 ?12次下載
    51<b class='flag-5'>單片機(jī)</b>的printf等<b class='flag-5'>格式</b>輸出函數(shù)

    STM32 tjpgd軟件JPEG解碼后RGB888數(shù)據(jù)格式問題

    STM32上面使用TJPGD解碼后,發(fā)現(xiàn)RGB888的數(shù)據(jù)格式單片機(jī)或常規(guī)的RGB格式順序有
    發(fā)表于 12-20 19:37 ?13次下載
    <b class='flag-5'>STM32</b> tjpgd軟件<b class='flag-5'>JPEG</b>解碼后<b class='flag-5'>RGB</b>888<b class='flag-5'>數(shù)據(jù)格式</b>問題

    AN5246_SMPS在STM32WB系列單片機(jī)上的應(yīng)用

    AN5246_SMPS在STM32WB系列單片機(jī)上的應(yīng)用
    發(fā)表于 11-21 08:11 ?0次下載
    AN5246_SMPS在<b class='flag-5'>STM32</b>WB系列<b class='flag-5'>單片機(jī)上</b>的應(yīng)用

    如何將FreeRTOS移植到STM32單片機(jī)上

    本文詳細(xì)介紹如何移植FreeRTOS到STM32單片機(jī)上。移植操作系統(tǒng)是嵌入式開發(fā)的入門基礎(chǔ),單片機(jī)和嵌入式在物理上其實(shí)是一摸一樣的,區(qū)別就是軟件上嵌入式跑了操作系統(tǒng)而單片機(jī)沒有。本文
    的頭像 發(fā)表于 01-20 17:36 ?3519次閱讀
    如何將FreeRTOS移植到<b class='flag-5'>STM32</b><b class='flag-5'>單片機(jī)上</b>
    中国足球竞猜网| 大发888游戏加速器| 百家乐官网线路图分析| 高碑店市| 大发888的任务怎么做| 怎样看百家乐路纸| 百家乐官网五湖四海赌场娱乐网规则 | 百家乐官网单打| 湘潭县| 大发888官方 hdlsj| 百家乐最新道具| KK百家乐官网娱乐城| 真人百家乐官网是啥游戏| 宝博娱乐城开户| 康莱德百家乐的玩法技巧和规则 | 88娱乐城开户| 正规百家乐平注法口诀| 百家乐游戏的玩法| 百家乐官网平点| 百家乐官网大眼仔用法| 足球开户| 大发888吧| 机械百家乐技巧| 百家乐视频聊天软件| 百家乐官网vshow| 百家乐官网筹码多少钱| 战神国际娱乐平| 大发888手机版下载安| 立即博百家乐的玩法技巧和规则| 百家乐斗地主在哪玩| 真人百家乐官网网络游戏信誉怎么样 | 大家旺百家乐的玩法技巧和规则| 澳门百家乐娱乐城送体验金| 欧凯百家乐官网的玩法技巧和规则| 澳门1百家乐官网网| 澳门博彩有限公司| 威尼斯人娱乐城线上博彩| 百家乐游戏辅助| 百家乐路单免费下载| 百家乐官网网站那个诚信好| 网上百家乐官网赌博出|