ffmpeg通過opencv顯示的bug分析--Apple的學(xué)習(xí)筆記

昨晚參考其它blog,將之前的SDL框架的顯示改成了opencv顯示。結(jié)果學(xué)習(xí)過程中遇到2個(gè)bug滩愁,結(jié)果都順利解決,主要是圖像格式轉(zhuǎn)換問題辫封。

問題1

顯示變色


image.png

通過vs2017中調(diào)試硝枉,對(duì)比正常變色的數(shù)據(jù),發(fā)現(xiàn)rgb和bgr顛倒了


image.png
    cv::Mat frameImage(cv::Size(width, height), CV_8UC3, cv::Scalar(0));
    stepWidth = frameImage.step;
    nChannels = frameImage.channels();
    pData = frameImage.data;
    //frameImage.data = pFrame->data[0];
#if 1
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            pData[i * stepWidth + j * nChannels + 0] = pFrame->data[0][i * pFrame->linesize[0] + j * nChannels + 2];
            pData[i * stepWidth + j * nChannels + 1] = pFrame->data[0][i * pFrame->linesize[0] + j * nChannels + 1];
            pData[i * stepWidth + j * nChannels + 2] = pFrame->data[0][i * pFrame->linesize[0] + j * nChannels + 0];
        }
    }
#endif

    cv::namedWindow("Video", CV_WINDOW_AUTOSIZE);
    cv::imshow("Video", frameImage);

小結(jié):正常sws_scale函數(shù)轉(zhuǎn)換格式后倦微,應(yīng)該frameImage.data = pFrame->data[0]; 就可以通過cv::imshow顯示了妻味,不需要再進(jìn)行data賦值,此賦值代碼中把RGB和BGR進(jìn)行了轉(zhuǎn)換欣福,導(dǎo)致的變色责球。

問題2

顯示3段,而且是灰色調(diào)的拓劝,圖像也不太正常


image.png

調(diào)試數(shù)據(jù)

0x00000292744DD080  12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12  ...................
0x00000292744DD093  12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12  ...................
0x00000292744DD0A6  12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13  ...................
0x00000292744DD0B9  13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13  ...................
0x00000292744DD0CC  13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13  ...................
0x00000292744DD0DF  13 13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14  ...................
0x00000292744DD0F2  14 14 14 15 14 14 15 15 15 15 15 15 16 16 15 16 16 16 16  ...................
0x00000292744DD105  16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16  ...................
0x00000292744DD118  16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16  ...................
0x00000292744DD12B  17 17 16 19 18 18 1c 1b 1a 1e 1e 1d 20 20 1f 20 20 20 21  ............  .   !
0x00000292744DD13E  21 20 21 21 21 21 21 21 20 21 21 20 20 20 20 20 20 21 21  ! !!!!!! !!      !!
0x00000292744DD151  20 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21   !!!!!!!!!!!!!!!!!!
0x00000292744DD164  21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  !!!!!!!!!!!!!!!!!!!
0x00000292744DD177  21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  !!!!!!!!!!!!!!!!!!!
0x00000292744DD18A  21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  !!!!!!!!!!!!!!!!!!!
0x00000292744DD19D  21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21  !!!!!!!!!!!!!!!!!!!
0x00000292744DD1B0  21 21 21 21 21 21 21 21 21 21 21 21 21 21 22 21 21 22 22  !!!!!!!!!!!!!!"!!""
0x00000292744DD1C3  22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22  """""""""""""""""""

問題分析:因?yàn)閳D像轉(zhuǎn)換的時(shí)候都用了AV_PIX_FMT_YUV420P雏逾,而此格式是planar。而把3個(gè)byte的Y(灰度)數(shù)據(jù)給了合并為一個(gè)RGB數(shù)據(jù)郑临,導(dǎo)致看上去有3片灰色的
YUV420 planar數(shù)據(jù)校套, 以720×488大小圖象YUV420 planar為例,
其存儲(chǔ)格式是: 共大小為(720×480×3>>1)字節(jié)牧抵,
分為三個(gè)部分:Y,U和V
Y分量: (720×480)個(gè)字節(jié)
U(Cb)分量:(720×480>>2)個(gè)字節(jié)
V(Cr)分量:(720×480>>2)個(gè)字節(jié)
三個(gè)部分內(nèi)部均是行優(yōu)先存儲(chǔ),三個(gè)部分之間是Y,U,V 順序存儲(chǔ)。
即YUV數(shù)據(jù)的0--720×480字節(jié)是Y分量值犀变,
720×480--720×480×5/4字節(jié)是U分量
720×480×5/4 --720×480×3/2字節(jié)是V分量妹孙。
sws_scale經(jīng)過YUV轉(zhuǎn)換后的數(shù)組有3個(gè),一個(gè)是Y數(shù)組获枝,一個(gè)是U數(shù)組蠢正,一個(gè)是V數(shù)組。而進(jìn)入RGB轉(zhuǎn)換數(shù)組只有1個(gè),存儲(chǔ)方式是RGB交叉排列的

找到根本原因后省店,問題順利解決嚣崭。

參考網(wǎng)址
1.圖像原始格式(YUV444 YUV422 YUV420)一探究竟
2.yuv422/yuv420格式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市懦傍,隨后出現(xiàn)的幾起案子雹舀,更是在濱河造成了極大的恐慌,老刑警劉巖粗俱,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件说榆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡寸认,警方通過查閱死者的電腦和手機(jī)签财,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偏塞,“玉大人唱蒸,你說我怎么就攤上這事【牡穑” “怎么了神汹?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)怜姿。 經(jīng)常有香客問我慎冤,道長(zhǎng),這世上最難降的妖魔是什么沧卢? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任蚁堤,我火速辦了婚禮,結(jié)果婚禮上但狭,老公的妹妹穿的比我還像新娘披诗。我一直安慰自己,他們只是感情好立磁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布呈队。 她就那樣靜靜地躺著,像睡著了一般唱歧。 火紅的嫁衣襯著肌膚如雪宪摧。 梳的紋絲不亂的頭發(fā)上粒竖,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音几于,去河邊找鬼蕊苗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沿彭,可吹牛的內(nèi)容都是我干的朽砰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼喉刘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼瞧柔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起睦裳,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤造锅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后推沸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體备绽,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年鬓催,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肺素。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宇驾,死狀恐怖倍靡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情课舍,我是刑警寧澤塌西,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站筝尾,受9級(jí)特大地震影響捡需,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筹淫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一站辉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧损姜,春花似錦饰剥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至棒卷,卻和暖如春顾孽,著一層夾襖步出監(jiān)牢的瞬間祝钢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工若厚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留太颤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓盹沈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吃谣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乞封,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345