OpenCV調整彩色圖像的飽和度和亮度


問題

如何調整彩色圖像的飽和度和亮度

解決思路

詳細步驟:

  1. 將RGB圖像值歸一化到[0, 1]
  2. 然后使用函數cvtColor進行色彩空間的轉換
  3. 接下來可以根據處理灰度圖像對比度增強伽馬變換或者線性變換調整飽和度和亮度分量
  4. 最后轉換到RGB色彩空間

代碼

# !/usr/bin/env python
# -*-encoding: utf-8-*-
# author:LiYanwei
# version:0.1


import numpy as np
import cv2


def main():
    # 加載圖片 讀取彩色圖像
    image = cv2.imread('./Files_image/img1.jpg', cv2.IMREAD_COLOR)
    # print(image)
    # cv2.imshow("image", image)
    # 圖像歸一化,且轉換為浮點型
    fImg = image.astype(np.float32)
    fImg = fImg / 255.0
    # 顏色空間轉換 BGR轉為HLS
    hlsImg = cv2.cvtColor(fImg, cv2.COLOR_BGR2HLS)
    l = 100
    s = 100
    MAX_VALUE = 100
    # 調節飽和度和亮度的窗口
    cv2.namedWindow("l and s", cv2.WINDOW_AUTOSIZE)
    def nothing(*arg):
        pass
    # 滑動塊
    cv2.createTrackbar("l", "l and s", l, MAX_VALUE, nothing)
    cv2.createTrackbar("s", "l and s", s, MAX_VALUE, nothing)
    # 調整飽和度和亮度后的效果
    lsImg = np.zeros(image.shape, np.float32)
    # 調整飽和度和亮度
    while True:
        # 復制
        hlsCopy = np.copy(hlsImg)
        # 得到 l 和 s 的值
        l = cv2.getTrackbarPos('l', 'l and s')
        s = cv2.getTrackbarPos('s', 'l and s')
        # 1.調整亮度(線性變換) , 2.將hlsCopy[:, :, 1]和hlsCopy[:, :, 2]中大於1的全部截取
        hlsCopy[:, :, 1] = (1.0 + l / float(MAX_VALUE)) * hlsCopy[:, :, 1]
        hlsCopy[:, :, 1][hlsCopy[:, :, 1] > 1] = 1
        # 飽和度
        hlsCopy[:, :, 2] = (1.0 + s / float(MAX_VALUE)) * hlsCopy[:, :, 2]
        hlsCopy[:, :, 2][hlsCopy[:, :, 2] > 1] = 1
        # HLS2BGR
        lsImg = cv2.cvtColor(hlsCopy, cv2.COLOR_HLS2BGR)
        # 顯示調整后的效果
        cv2.imshow("l and s", lsImg)

        ch = cv2.waitKey(5)
        # 按 ESC 鍵退出
        if ch == 27:
            break
        elif ch == ord('s'):
            # 按 s 鍵保存並退出
            # 保存結果
            lsImg = lsImg * 255
            lsImg = lsImg.astype(np.uint8)
            cv2.imwrite("lsImg.jpg", lsImg)
            break

    # 關閉所有的窗口
    cv2.destroyAllWindows()


if __name__ == "__main__":
    main()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM