【opencv】YUV各种色彩、YUV420sp2RGB
對(duì)于 YUV 所表示的圖像,Y 和 UV 分量是分離的。如果只有 Y 分量而沒(méi)有 UV 分離,那么圖像表示的就是黑白圖像。彩色電視機(jī)采用的就是 YUV 圖像,解決與和黑白電視機(jī)的兼容問(wèn)題,使黑白電視機(jī)也能接受彩色電視信號(hào)。
人眼對(duì)色度的敏感程度低于對(duì)亮度的敏感程度。主要原因是視網(wǎng)膜桿細(xì)胞多于視網(wǎng)膜錐細(xì)胞,其中視網(wǎng)膜桿細(xì)胞的作用就是識(shí)別亮度,視網(wǎng)膜錐細(xì)胞的作用就是識(shí)別色度。所以,眼睛對(duì)于亮度的分辨要比對(duì)顏色的分辨精細(xì)一些。
利用這個(gè)原理,可以把色度信息減少一點(diǎn),人眼也無(wú)法查覺(jué)這一點(diǎn)。
所以,并不是每個(gè)像素點(diǎn)都需要包含了 Y、U、V 三個(gè)分量,根據(jù)不同的采樣格式,可以每個(gè) Y 分量都對(duì)應(yīng)自己的 UV 分量,也可以幾個(gè) Y 分量共用 UV 分量。相比 RGB,能夠節(jié)約不少存儲(chǔ)空間。
YUV 4:4:4采樣方式與 RGB 圖像大小是一樣的。
YUV 4:2:2相比 RGB, 節(jié)省了三分之一的存儲(chǔ)空間。
YUV 4:2:0相比 RGB, 節(jié)省了一半的存儲(chǔ)空間。
設(shè)實(shí)際寬高為w*h的圖像,如果是RGB格式,那么他的數(shù)據(jù)量為w*h*3;
如果是yuv420格式,那么他的數(shù)據(jù)量為w*h*1.5
因?yàn)閥uv4:4:4的數(shù)據(jù)量等于RGB數(shù)據(jù)量,而yuv4:4:4是yuv4:2:0數(shù)據(jù)量的2倍,所以yuv4:2:0的數(shù)據(jù)量為w*h*3/2。
從yuv420sp轉(zhuǎn)化得到RGB的步驟:
- 1.當(dāng)我們拿到一幀圖像的yuv原始數(shù)據(jù)后,首先需要明確拿到的是以下哪種yuv數(shù)據(jù):yuv4:4:4、yuv4:2:2、yuv4:2:0。并且,我們都會(huì)知道給對(duì)應(yīng)圖像的寬和高,因?yàn)檫@都是驅(qū)動(dòng)配置給出的。如果你是從yuv元素?cái)?shù)據(jù)中截取出來(lái)的某roi區(qū)域的yuv數(shù)據(jù),那么你也應(yīng)該知道該roi的寬和高。注意,此時(shí)的寬和高是指圖像的寬和高,不是指代圖像數(shù)據(jù)碼流排列的行數(shù)和列數(shù)。
- 2.把原始yuv數(shù)據(jù)通過(guò)構(gòu)造cv::Mat格式封裝起來(lái),此時(shí)的cv::Mat的寬(.cols)和高(.rows)就需要變化了,因?yàn)閥uv格式和RGB格式的數(shù)據(jù)量是不一樣的,yuv格式如果不是yuv4:4:4(yuv數(shù)據(jù)量為w*(h*3))的話,那么yuv格式的數(shù)據(jù)量是一定比RGB少的。所以,此時(shí)如果是yuv420格式,就根據(jù)yuv420格式的特點(diǎn),把cv::Mat的寬高設(shè)置為w*(h*1.5),且必須為單通道,注意這里寬度不變,是在高度上延伸。yuyv原始數(shù)據(jù)變成cv::Mat格式后,你如果直接imshow顯示的話,圖像會(huì)變高。轉(zhuǎn)化成RGB格式后才會(huì)恢復(fù)為正常寬和高。
- 3.然后再通過(guò)cv::cvtColor(yuyv_img, rgb_img, cv::COLOR_YUV420sp2RGB);轉(zhuǎn)化得到RGB圖像。
注意構(gòu)造yuyv的cv::Mat時(shí)通道類型是CV_8UC1,而構(gòu)造RGB的cv::Mat時(shí)通道類型是CV_8UC3.
cv::Mat yuyv_img =cv::Mat(box.height * 3 / 2, box.width, CV_8UC1,const_cast<unsigned char *>(yuv_raw.data())); if (!yuyv_img.data) {std::cout << "empty yuyv_img"<< std::endl; } cv::Mat rgb_img = cv::Mat(box.height, box.width, CV_8UC3); cv::cvtColor(yuyv_img, rgb_img, cv::COLOR_YUV420sp2RGB);可參考下面兩篇文章來(lái)理解YUV:
一文理解 YUV
YUV色彩格式總結(jié)
總結(jié)
以上是生活随笔為你收集整理的【opencv】YUV各种色彩、YUV420sp2RGB的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【自动驾驶】定位方式:RTK定位与激光融
- 下一篇: 【数学与算法】曲线上各点的曲率kappa