正如我們所見,opencv和ios sdk中對於彩色和灰度影象是有不同的資料格式的,有時我們需要在這些格式之間進行轉換。讓我們從從**中脫離出來,討論一下這些格式之間的差異以及如果不執行正確的轉換可能出現的問題。
您可能在很久以前在第一次使用繪圖軟體或者文字處理軟體時選擇自定義的顏色時,就知道了24位rgb顏色格式。畫素的顏色由三個值序列表示,每個值範圍從0到255(即,8位或1位元組)。第乙個值是顏色的紅色分量或通道,後面是綠色,最後是藍色。例如,黃色交通燈的顏色是(255,126,0),紅色和綠色的混合物,沒有藍色。一系列的畫素資料形成影象。
24位bgr格式簡單地顛倒了通道順序。例如,黃色交通燈的顏色是bgr格式的(0,126,255)。
[使用rgb或bgr,每畫素24位(bpp)就足以表示微妙的顏色漸變。典型的螢幕和消費者攝像機被限制為24bpp。然而,一些高階相機和螢幕支援30bpp甚至更多。對於我們在ios上的專案,24bpp是乙個合理的限制。]
如果我們編寫乙個程式,錯誤地將rgb影象視為bgr(反之亦然),我們將會看到像右手影象一樣的奇怪的結果!
假設我們希望使用少於24bpp來表示影象,以便我們的影象使用更少的記憶體並且可以在更少的時間內進行處理。為此,我們必須犧牲24bpp在rgb或bgr中可以表示的一些微妙的顏色漸變。然而,我們也許希望保留表示亮度細微等級的能力。這裡,我們遇到了rgb和bgr的關鍵限制。亮度取決於所有的三個通道,並且當我們在任何通道中犧牲位元資料時,我們丟失亮度的漸變!
yuv顏色模型解決了這個問題。y通道僅僅代表亮度。u通道表示藍色(相對於綠色),而v通道表示紅色(也相對於綠色)。yuv的一些變體是planar格式,首先連續儲存所有畫素點的y,緊接著儲存所有畫素點的u,隨後是所有畫素點的v。yuv的其他變體是packed格式,每個畫素點的y,u,v是連續交叉儲存的,就好像rgb或bgr中的r、g和b資料的儲存方式.
平面格式的乙個例子是i420,它有12bpp。這包括全解析度影象中每個畫素的8位y值以及以半解析度取樣的4位u和4位v值。
乙個打包格式的例子是yuyv,它有16bpp。這包括全解析度影象中每個畫素的8位y值以及以半解析度取樣的8位u和8位v值。注意,所有這些值都是位元組大小的。每個y位元組交替地與u或v位元組交織,如名稱yuyv所示。
[8位y通道捕獲的亮度等級與三個通道的24位rgb或bgr影象的亮度等級相同.]
###返回到書籍目錄###
###返回到第二章目錄###
linux c 下,使用不同的顏色列印log資訊
更多顏色及操作說明 通過printf設定linux終端輸出的顏色和顯示方式 linux c語言 讓你的printf多姿多彩,讓你的日誌列印高效快捷 printf帶顏色列印輸出 ifndef local log h define local log h include 巨集對定義的先後順序沒有要求 當...
不同的使用者使用不同語種的Gnome
今天,忽發奇想,怎麼才能讓不同的使用者,使用不同語言的 gnome 比如 root 使用者,我讓他用英文的 gnome 但是可以用 fcitx 而使用者 wallace 我讓他用中文的 gnome。我實現用中文 gnome 靠的是這個檔案 etc x11 xsession.d 95input 內容是...
使用不同版本的 so 檔案
兩個版本的 so 的 api 沒有變動的話,可以直接使用軟連線 ln s 例如 home wwang 目錄下有乙個可執行檔案 exec 依賴 ww.so.1,而現有庫 usr lib ww.so.2,1.則可以在 home wwang 下建立以軟連線 ln s ww.so.2 ww.so.1 2.執...