我試圖將12位RGGB顏色值轉換爲8位RGGB顏色值,但用我目前的方法,它給出了奇怪的結果。將12位顏色值轉換爲8位顏色值C++
從邏輯上講,我認爲簡單地將12位RGGB成8位RGGB會工作,並非常簡單:
// raw_color_array contains R,G1,G2,B in a bayer pattern with each element
// ranging from 0 to 4096
for(int i = 0; i < array_size; i++)
{
raw_color_array[i] /= 16; // 4096 becomes 256 and so on
}
然而,在實踐中這其實是行不通的。例如,給出一個帶有水和冰塊的小圖像,您可以看到轉換中實際發生的情況(最右圖)。
爲什麼會出現這種情況?以及如何在左側獲得相同(或接近)的圖像,而是以8位值爲準?謝謝!
編輯:關@MSalters答案,我得到一個更好的圖像質量,但顏色仍然激烈傾斜。我可以研究哪些資源將12位數據轉換爲8位數據,而不會造成質量的嚴重損失?
你有沒有試過在頻道上做直方圖,看看你是否應該贊成某些範圍,而不是廣泛開放的16分方法? –
您是否調試過並觀察過'raw_color_array'的值?他們是你期望的嗎? 'raw_color_array'的數據類型是什麼?你有一個舍入錯誤? –
@ChrisO事實上,我的第一次嘗試是觀察直方圖並猜測正態化方案。它產生的結果幾乎相同,但它不是一個可擴展的解決方案(例如,我需要重新爲14位彩色圖像等進行此過程)。想知道這是否可能,而沒有關注它。 –