YUV420、YUV422、RGB24轉換

//平面YUV422轉平面RGB24
static void YUV422p_to_RGB24(unsigned char *yuv422[3], unsigned char *rgb24, int width, int height)
{
?int R,G,B,Y,U,V;
?int x,y;
?int nWidth = width>>1; //色度信號寬度
?for (y=0;y<height;y++)
?{
? for (x=0;x<width;x++)
? {
?? Y = *(yuv422[0] + y*width + x);
?? U = *(yuv422[1] + y*nWidth + (x>>1));
?? V = *(yuv422[2] + y*nWidth + (x>>1));
?? R = Y + 1.402*(V-128);
?? G = Y - 0.34414*(U-128) - 0.71414*(V-128);
?? B = Y + 1.772*(U-128);
??
?? //防止越界
?? if (R>255)R=255;
?? if (R<0)R=0;
?? if (G>255)G=255;
?? if (G<0)G=0;
?? if (B>255)B=255;
?? if (B<0)B=0;
??
?? *(rgb24 + ((height-y-1)*width + x)*3) = B;
?? *(rgb24 + ((height-y-1)*width + x)*3 + 1) = G;
?? *(rgb24 + ((height-y-1)*width + x)*3 + 2) = R;?
? }
?}
}

//平面YUV420轉平面YUV422
static void YUV420p_to_YUV422p(unsigned char *yuv420[3], unsigned char *yuv422, int width, int height)?
{
?int x, y;
?//亮度信號Y復制
?int Ylen = width*height;
?memcpy(yuv422, yuv420[0], Ylen);
?//色度信號U復制
?unsigned char *pU422 = yuv422 + Ylen; //指向U的位置
?int Uwidth = width>>1; //422色度信號U寬度
?int Uheight = height>>1; //422色度信號U高度
?for (y = 0; y < Uheight; y++)
?{????????
? memcpy(pU422 + y*width,????????? yuv420[1] + y*Uwidth, Uwidth);
? memcpy(pU422 + y*width + Uwidth, yuv420[1] + y*Uwidth, Uwidth);
?}
?//色度信號V復制
?unsigned char *pV422 = yuv422 + Ylen + (Ylen>>1); //指向V的位置
?int Vwidth = Uwidth; //422色度信號V寬度
?int Vheight = Uheight; //422色度信號U寬度
?for (y = 0; y < Vheight; y++)
?{?
? memcpy(pV422 + y*width,????????? yuv420[2] + y*Vwidth, Vwidth);
? memcpy(pV422 + y*width + Vwidth, yuv420[2] + y*Vwidth, Vwidth);
?}
}

//平面YUV420轉RGB24
static void YUV420p_to_RGB24(unsigned char *yuv420[3], unsigned char *rgb24, int width, int height)
{
//? int begin = GetTickCount();
?int R,G,B,Y,U,V;
?int x,y;
?int nWidth = width>>1; //色度信號寬度
?for (y=0;y<height;y++)
?{
? for (x=0;x<width;x++)
? {
?? Y = *(yuv420[0] + y*width + x);
?? U = *(yuv420[1] + ((y>>1)*nWidth) + (x>>1));
?? V = *(yuv420[2] + ((y>>1)*nWidth) + (x>>1));
?? R = Y + 1.402*(V-128);
?? G = Y - 0.34414*(U-128) - 0.71414*(V-128);
?? B = Y + 1.772*(U-128);

?? //防止越界
?? if (R>255)R=255;
?? if (R<0)R=0;
?? if (G>255)G=255;
?? if (G<0)G=0;
?? if (B>255)B=255;
?? if (B<0)B=0;
??
?? *(rgb24 + ((height-y-1)*width + x)*3) = B;
?? *(rgb24 + ((height-y-1)*width + x)*3 + 1) = G;
?? *(rgb24 + ((height-y-1)*width + x)*3 + 2) = R;
//??? *(rgb24 + (y*width + x)*3) = B;
//??? *(rgb24 + (y*width + x)*3 + 1) = G;
//??? *(rgb24 + (y*width + x)*3 + 2) = R;??
? }
?}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449712.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449712.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449712.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最長非下降子序列(O(nlogn))(offer收割)

題目 如題 思路 核心思想是&#xff0c;維護一個數組ends&#xff0c;它記錄了長度為k的子序列的末尾元素的最小值。聽起來很抽象&#xff0c;我們不妨手動演示一遍整個過程。 假設數組a{2,9,4,27,29,15,7}&#xff0c;令length表示當前找到的最長非下降子序列的長度。初始時le…

[Python]小甲魚Python視頻第026課(字典:當索引不好用時2)課后題及參考解答

# -*- coding: utf-8 -*- """ Created on Fri Mar 8 10:32:20 2019author: Administrator """"""測試題&#xff1a;0. Python的字典是否支持一鍵&#xff08;Key&#xff09;多值&#xff08;Value&#xff09;&#xff1f;不支…

2021-08-12 畫蠟燭線

畫蠟燭線 pip install https://github.com/matplotlib/mpl_finance/archive/master.zip from mpl_finance import candlestick_ochl import matplotlib.pyplot as plt from matplotlib.pylab import date2num# 先畫日K線 fig, axes plt.subplots(nrows1, ncols1, figsize(20, …

替換字符串列表中字符串

//替換字符串列表中字符串 procedure StringsReplace(var S : TStrings; OldPattern, NewPattern: string; Flags: TReplaceFlags);var i : integer; tmpstr : string;begin for i : 0 to S.Count -1 do begin tmpstr : S[i]; s[i] : StringReplace(tmpstr, Ol…

TCP/IP協議族 詳解(TCP/IP四層模型、OSI七層模型)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 TCP/IP協議族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;簡稱TCP/IP。由于在網絡通訊協…

RGB 24和YUY2相互轉換

YUY2經常用于電視制式以及許多攝像頭的輸出格式.而我們在處理時經常需要將其轉化為RGB進行處理,這里簡單介紹下YUY2(YUV)與RGB之間相互轉化的關系: http://msdn2.microsoft.com/en-us/library/ms893078.aspx YUY2(YUV) To RGB: C Y - 16 D U - 128 E V - 128 R clip((…

通達信獲取數據

#python第三方庫pytdx獲取 from pytdx.hq import TdxHq_API api TdxHq_API() # 數據獲取接口一般返回list結構&#xff0c;如果需要轉化為pandas Dataframe接口&#xff0c;可以使用 api.to_df 進行轉化 with api.connect(119.147.212.81, 7709): # 返回普通list data …

ICMP (互聯網控制消息協議 )是什么

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 互聯網控制消息協議&#xff08;英語&#xff1a;Internet Control Message Protocol&#xff0c;縮寫&#xff1a;ICMP&#xff09;是互…

股票數據相關性分析

導入相關包 import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollection import akshare as ak from sklearn import cluster, covariance, manifold %matplotlib inline #Jupyter Notebook顯示圖形專用 plt…

分享一個輔助分析內存泄漏的腳本

最近給系統做了一點優化&#xff0c;前幾天去查看系統監控&#xff0c;想看看上線前后cpu使用率曲線變化情況。查看的時候意外發現上線前后內存占用相差不少&#xff0c;20%以上。 本來我沒怎么在意這個問題&#xff0c;因為我們系統會在運行過程中緩存部分數據內容。但客戶覺得…

windows Virtualbox下配置Ubuntu,且用ssh連接

1、軟件介紹 1&#xff09;virtualbox 5.2.22 2&#xff09;Ubuntu 18.04 3&#xff09;git bash 2、virtualbox設置 安裝完Ubuntu后點擊該鏡像的設置&#xff0c;依次點擊“網絡”——“端口轉發” 將主機端口設置為一個閑置端口&#xff0c;子系統端口也就是Ubuntu端口設置…

專訪劉偉:軟件開發人員的內功修煉之道

摘要&#xff1a;數學修養對軟件開發之路起著什么作用&#xff1f;碼農如何修煉自己的內功并成長為優秀的軟件開發員&#xff1f;帶著相關思考&#xff0c;社區之星第10期采訪了中南大學副教授——劉偉。他對數學修養、設計模式、軟件架構和重構方面的獨特見解&#xff0c;相信…

多線程數據下載(akshare)

import akshare as ak import pandas as pd from multiprocessing.dummy import Pool as ThreadPool import datetime import timedef get_hs300_stock_codes():獲取滬深300股票代碼列表:return:hs300ak.index_stock_cons_sina("000300")codeshs300[code]codescodes.…

MongoDB 4.6.1 c++ driver 編譯

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主同意不得轉載。https://blog.csdn.net/sheismylife/article/details/25512251 這個版本號已經和之前不一樣了。有專門的github的項目。https://github.com/mongodb/mongo-cxx-driver首先獲取源碼&#xff1a;git cl…

地址解析協議 (ARP) 是什么

地址解析協議 (ARP) 是通過解析網路層地址來找尋數據鏈路層地址的一個在網絡協議包中極其重要的網絡傳輸協議。 ARP是通過網絡地址(例&#xff1a;IPv4)來定位MAC地址 (也稱為乙太地址)。 ARP已經在很多網路層和數據鏈接層之間得以實現&#xff0c;包括IPv4&#xff0c;Chaosn…

04.React事件 方法、 React定義方法的幾種方式 獲取數據 改變數據 執行方法傳值...

2019獨角獸企業重金招聘Python工程師標準>>> 一.基本用法 在以類繼承的方式定義的組件中&#xff0c;為了能方便地調用當前組件的其他成員方法或屬性&#xff08;如&#xff1a;this.state&#xff09;&#xff0c;通常需要將事件處理函數運行時的 this 指向當前組件…

代碼之美——Doom3源代碼賞析

摘要&#xff1a;Dyad作者、資深C工程師Shawn McGrathz在空閑時翻看了Doom3的源代碼&#xff0c;發出了這樣的驚嘆&#xff1a;“這是我見過的最整潔、最優美的代碼&#xff01;”“Doom 3的源代碼讓我對那些優秀的程序員刮目相看。”因此有了本文。 背景介紹&#xff1a; Doom…

UDP:用戶數據報協議 是什么

用戶數據報協議&#xff08;英語&#xff1a;User Datagram Protocol&#xff0c;縮寫為UDP&#xff09;&#xff0c;又稱用戶數據報文協議&#xff0c;是一個簡單的面向數據報的傳輸層協議&#xff0c;正式規范為RFC 768。在TCP/IP模型中&#xff0c;UDP為網絡層以上和應用層以…

隨想錄(程序員和收入)

距離上一次寫博客已經很長時間了&#xff0c;大約過了三個星期。這三個星期發生了很多事情&#xff0c;這中間也有我自己的思考積累&#xff0c;也有工作上的變故。總之&#xff0c;自己想了很多&#xff0c;也得到了很多。每到這個時候&#xff0c;畢業生朋友們都在尋找工作&a…

iOS進階之正則表達式

最近一直在弄正則表達式&#xff0c;于是在這里整理一下&#xff0c;便于日后查閱。 1、常用符號 ^&#xff1a;字符串的開始$&#xff1a;字符串的結束*&#xff1a;表示零個或若干個?&#xff1a;表示零個或一個&#xff1a;表示一個或若干個| &#xff1a;表示 或 操作. &a…