那曲檬骨新材料有限公司

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>
    必博365| 百家乐官网破解打法| 百家乐官网赌博规律| 百家乐最佳下注方法| 棋牌室名字| 百家乐官网游戏开发软件| 如何玩百家乐扑克| 澳门博彩8345cc| 百家乐官网可以作假吗| 百家乐必胜打| 大发888娱乐游戏下载 官方网| 做百家乐官网网上投注| 百家乐破解方法技巧| SHOW| 百家乐官网为什么庄5| 乐百家乐彩现金开户| 一二博网| 做生意门店风水知识| 百家乐园首选| 娱网百家乐官网补丁| 威尼斯人娱乐平台开户| 百家乐官网学院| 新百家乐的玩法技巧和规则| 现金百家乐官网网上娱乐| 百家乐足球投注网哪个平台网址测速最好 | 永康百家乐官网赌博| 百家乐玩法官网| 百家乐官网透明牌靴| 大发888娱乐城刮刮乐| 百家乐官网最佳打| 大发888游戏平台103| 百家乐官网赢多少该止赢| 大发888xp缺少 casino| 百家乐官网羸钱法| 大发888娱乐场 34| 百家乐官网视频游戏掉线| 奇迹百家乐的玩法技巧和规则 | 去澳门百家乐官网的玩法技巧和规则 | 建平县| 王子百家乐的玩法技巧和规则| 皇冠足球|