首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 實現圖片色彩平衡:模擬 Photoshop 影子/中間調/高光三段式 RGB 調節

     編輯:程式設計綜合問答

色彩平衡數學原理

Photoshop 色彩平衡將圖像按**亮度劃分三個區域**,分別調整 RGB 通道增益:

  • 影子:低亮度區域(如 0-63 級)
  • 中間調:中等亮度區域(如 64-191 級)
  • 高光:高亮度區域(如 192-255 級)

每個區域提供三個滑桿:青/紅、洋紅/綠、黃/藍,本質是**對 RGB 通道乘以不同係數**。

算法流程

  1. 輸入 RGB 像素,計算亮度 L = 0.299*R + 0.587*G + 0.114*B。
  2. 根據 L 判斷屬於影子/中間調/高光區間。
  3. 查表獲取該區間的 RGB 增益係數 (kr, kg, kb)(由滑桿值換算)。
  4. 輸出像素:R' = clamp(R * kr), G' = clamp(G * kg), B' = clamp(B * kb)。
  5. 可選:引入**保護亮度**選項,調整後重新分配亮度保持整體明度不變。

係數換算(滑桿 -100 到 +100)

// 以青/紅為例:滑桿值 s ∈ [-100, 100]
// 正值向紅(增加 R,減少 G,B),負值向青(減少 R,增加 G,B)
float factor = 1.0f + s / 100.0f * MAX_SHIFT;  // MAX_SHIFT 經驗值如 0.5
if (s >= 0) {  // 向紅
    kr = factor; kg = 1.0f / factor; kb = 1.0f / factor;
} else {       // 向青
    kr = 1.0f / factor; kg = factor; kb = factor;
}

參考資源

  • 《Photoshop 色彩平衡算法實現》- CSDN 博客:https://blog.csdn.net/app_12062011/article/details/26162791
  • OpenCV 色彩平衡實現:https://download.csdn.net/detail/me_sky_2012/4345831
  • 數學推導詳解:https://chuansong.me/n/126105
  • 保護亮度算法:https://blog.csdn.net/lvwx369/article/details/41847237

工程建議

  • 預計算 256 級亮度對應的區間索引與係數查找表(LUT),運行時僅查表乘法,極快。
  • 支援 GPU/並行(OpenMP、CUDA),單幀處理毫秒級。
  • 提供「保護亮度」開關,滿足專業後期需求。

總結

色彩平衡核心是**亮度分段 + 分段 RGB 通道增益**。C++ 實現時用 LUT 加速,參考 Photoshop 三區域滑桿邏輯換算係數,配合保護亮度選項,即可得到專業級效果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved