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

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

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

SDL顯示YUV圖像數(shù)據(jù)

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-09-29 15:57 ? 次閱讀

SDL顯示YUV圖像數(shù)據(jù)

1.YUV簡介

? YUV,分為三個分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V”表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。
與我們熟知的RGB類似,YUV也是一種顏色編碼方法,主要用于電視系統(tǒng)以及模擬視頻領(lǐng)域,它將亮度信息(Y)與色彩信息(UV)分離,沒有UV信息一樣可以顯示完整的圖像,只不過是黑白的,這樣的設(shè)計很好地解決了彩色電視機(jī)與黑白電視的兼容問題。并且,YUV不像RGB那樣要求三個獨(dú)立的視頻信號同時傳輸,所以用YUV方式傳送占用極少的頻寬。
YUV碼流的存儲格式其實與其采樣的方式密切相關(guān),主流的采樣方式有三種,YUV4:4:4,YUV4:2:2,YUV4:2:0

2.ffmpeg將mp4轉(zhuǎn)yuv格式

ffmpeg -i test.mp4 -s 960x540 -pix_fmt yuv420p yuv420960_540.yuv

3.SDL顯示示例

#include 
#include 
#include 
#include 
typedef enum
{
	false,
	true,
}bool;
int main(int argc,char *argv[])
{
	FILE *fp=fopen("yuv420960_540.yuv","rb");	
	if(fp==NULL)	
	{		
		printf("文件打開失敗n");		
		return 0;	
	}
	//yuv420保存格式:y占2份,uv各占1份,y表示亮度,uv表示顏色
	char *p=malloc(960*540*3);	
	
	
	SDL_Init(SDL_INIT_VIDEO);
	/*創(chuàng)建窗口*/
	SDL_Window *window=SDL_CreateWindow("SDL_VIDEO", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,800,480,SDL_WINDOW_SHOWN);
	/*創(chuàng)建渲染器*/
	SDL_Renderer *render=SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED);
	/*清空渲染器*/
	SDL_RenderClear(render);
	/*創(chuàng)建紋理*/
	SDL_Texture *sdltext=SDL_CreateTexture(render,SDL_PIXELFORMAT_IYUV,SDL_TEXTUREACCESS_STREAMING,960,540);
	
	bool quit=true;
	SDL_Event event;
	while(quit)
	{	
		SDL_PollEvent(&event);/*事件監(jiān)測*/
		if(event.type==SDL_QUIT)/*退出事件*/
		{
			quit=false;
		}
		fread(p,1,960*540*3/2,fp);/*讀取一幀數(shù)據(jù)*/
		SDL_UpdateTexture(sdltext,NULL,p, 960);
		SDL_RenderCopy(render, sdltext, NULL, NULL); // 拷貝紋理到渲染器
        SDL_RenderPresent(render); // 渲染
	}
}

3 Makefile文件

CFLAGS =-I/home/wbyq/src_pack/SDL2-2.0.14/_install/include -I/home/wbyq/src_pack/SDL2-2.0.14/_install/include/SDL2 -L/home/wbyq/src_pack/SDL2-2.0.14/_install/lib
CFLAGS +=-L/home/wbyq/src_pack/SDL2_image-2.0.5/_install/lib -I/home/wbyq/src_pack/SDL2_image-2.0.5/_install/include -I/home/wbyq/src_pack/SDL2_image-2.0.5/_install/include/SDL2
CFLAGS+=-lSDL2 -lpthread -lm -ldl -lSDL2_image
app:
	gcc sdl_test.c  $(CFLAGS)

4 運(yùn)行效果

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

    關(guān)注

    0

    文章

    50

    瀏覽量

    11205
  • SDL
    SDL
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    7347
  • YUV
    YUV
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    2865
收藏 人收藏

    評論

    相關(guān)推薦

    SDL編譯安裝圖片顯示

    ?SDL(Simple DirectMediaLayer)是一套開放源代碼的跨平臺多媒體開發(fā)庫,使用C語言寫成。SDL提供了數(shù)種控制圖像、聲音、輸出入的函數(shù),讓開發(fā)者只要用相同或是相似的代碼就可以
    的頭像 發(fā)表于 09-29 15:54 ?1353次閱讀
    <b class='flag-5'>SDL</b>編譯安裝圖片<b class='flag-5'>顯示</b>

    SDL顯示文本

    ?? SDL2.0庫本身沒有文本數(shù)據(jù)顯示相關(guān)函數(shù)接口,文本顯示需要編譯安裝SDL_ttf庫。
    的頭像 發(fā)表于 09-29 16:32 ?1839次閱讀
    <b class='flag-5'>SDL</b><b class='flag-5'>顯示</b>文本

    SDL時間和天氣顯示

    ?SDL(Simple DirectMediaLayer)是一套開放源代碼的跨平臺多媒體開發(fā)庫,使用C語言寫成。SDL提供了數(shù)種控制圖像、聲音、輸出入的函數(shù),讓開發(fā)者只要用相同或是相似的代碼就可以
    的頭像 發(fā)表于 12-08 14:15 ?1031次閱讀

    Linux下基于SDL庫貪吃蛇游戲

    ?SDL(Simple DirectMediaLayer)是一套開放源代碼的跨平臺多媒體開發(fā)庫,使用C語言寫成。SDL提供了數(shù)種控制圖像、聲音、輸出入的函數(shù),讓開發(fā)者只要用相同或是相似的代碼就可以
    的頭像 發(fā)表于 12-11 14:29 ?3190次閱讀
    Linux下基于<b class='flag-5'>SDL</b>庫貪吃蛇游戲

    Linux下V4L2框架基于SDL庫本地USB攝像頭監(jiān)控

    開啟攝像頭采集:VIDIOC_STREAMON (視頻捕獲格式) (7)從采集隊列中取出圖像數(shù)據(jù),通過SDL圖像渲染;
    的頭像 發(fā)表于 12-17 15:37 ?3599次閱讀
    Linux下V4L2框架基于<b class='flag-5'>SDL</b>庫本地USB攝像頭監(jiān)控

    移植SDL到JZ2440顯示BMP圖片

    LOGO的制作, 韋老師第3期講了如何顯示jpeg圖片, 那么怎么顯示bmp圖片?這次我們借助libSDL來實現(xiàn),我們先移植SDL到Ubuntu, 體驗它的威力后再移植到開發(fā)板。一、移植SDL
    發(fā)表于 06-29 11:19

    在vpss上得到cif大小的yuv,連同500萬像素的yuv拷貝在一塊連續(xù)的內(nèi)存上,在dsp上做兩個圖像yuv轉(zhuǎn)rgb。這樣是否可行?

    是:我在vpss上得到cif大小的yuv,然后連同500萬像素的yuv拷貝在一塊連續(xù)的內(nèi)存上,一起送給dsp,在dsp上做兩個圖像yuv轉(zhuǎn)rgb。不知這樣是否可行?這樣就省去了兩路
    發(fā)表于 05-25 05:57

    YUV_FRAMES_TO_A8 顯示正常但保存YUV數(shù)據(jù)有誤,請問是什么原因?

    ;outQueId = 0;本地保存YUV數(shù)據(jù)的代碼并未完善,在ti_mcfw_ipcframes.c中,打開了宏CUSTOM_SD_DEMO,并在App_ipcFramesFileWriteCreate中修改
    發(fā)表于 05-28 13:55

    亮度圖像顯示問題。

    采用GS2961芯片輸出高清視頻,YUV分離模式,DM8127接入后,單獨(dú)顯示亮度圖像。如下: 感覺灰度等級量化少了。 ?GS2961輸出10bit Y數(shù)據(jù),硬件上只連接了高8位管腳到
    發(fā)表于 06-21 12:25

    DM8127使用DSP直接修改YUV數(shù)據(jù)造成圖像異常

    目前正在開發(fā)DSP中的圖像算法,需要對YUV圖像中的Y分量進(jìn)行直接修改 一開始先嘗試將Y分量的值直接取代掉來進(jìn)行測試: unsigned char* pSrc = pFrame->addr[0][0]; ?for (i= 0;
    發(fā)表于 06-21 02:12

    基于FPGA的RGB2YUV、圖像增強(qiáng)、YUV2RGBIP仿真實例

    的功能框圖如下所示。該IP輸入和輸出的圖像數(shù)據(jù)必須為YUV444或YUV422模式;待處理圖像進(jìn)入IP后,首先需要多行緩存,然后分別通過降噪
    發(fā)表于 08-12 18:50

    基于SDL的自動售票系統(tǒng)的研發(fā)

    基于SDL 的自動售票系統(tǒng)的研發(fā)顧麗麗 梅杓春(南京郵電大學(xué)自動化學(xué)院,江蘇南京 210003)摘要:本文簡要介紹了SDL語言及其支持工具。通過設(shè)計自動售票系統(tǒng)實例對如何利用SDL
    發(fā)表于 12-18 11:34 ?21次下載

    SDL下載與配置

    點擊[SDL2 核心庫下載](https://libsdl.org/download-2.0.php)下載SDL2庫,如下圖根據(jù)編譯器選擇不同版本(Visual Studo系列選擇第一個)。
    的頭像 發(fā)表于 02-27 14:51 ?2682次閱讀
    <b class='flag-5'>SDL</b>下載與配置

    什么是YUV

    簡單的講YUV是一種圖像和視頻的編碼方式,RGB通過三種顏色來表達(dá)現(xiàn)實世界中的各種顏色,YUV通過亮度與色度飽和度來表示顏色。
    的頭像 發(fā)表于 03-03 09:50 ?1606次閱讀
    什么是<b class='flag-5'>YUV</b>

    YUV和RGB是如何進(jìn)行轉(zhuǎn)換的

    首先要明確待轉(zhuǎn)換格式和目標(biāo)格式的特點和相互轉(zhuǎn)換關(guān)系,這是編程實現(xiàn)轉(zhuǎn)換的核心。對于 RGB 轉(zhuǎn)YUV 的過程,我們要首先拿到 RGB 文件的數(shù)據(jù),再通過上圖的 YUV 計算公式對其做 運(yùn)算,得到
    的頭像 發(fā)表于 07-30 10:06 ?1706次閱讀