一個需求是將圖片中的紅色部分轉換為藍色部分,最初的想法是通過通道互換來解決,但這可能會導致一些混合色的變化。例如,橙色變為紫色(黃 + 紅 || 黃綠 + 藍)。
另一種思路是進行色彩空間轉換。如果在一個空間內無法解決問題,可以通過坐標變換轉換到另一個空間求解,然後再轉換回來。在另一個空間中,我們的操作不會對原空間產生預期之外的影響。
實現代碼:
import cv2
import numpy as np
image = cv2.imread('C:/Users/admin/Desktop/test.png')
HSVImage = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lowerRed1 = np.array([0, 64, 50])
upperRed1 = np.array([10, 255, 255])
lowerRed2 = np.array([160, 64, 50])
upperRed2 = np.array([180, 255, 255])
redMask1 = cv2.inRange(HSVImage, lowerRed1, upperRed1)
redMask2 = cv2.inRange(HSVImage, lowerRed2, upperRed2)
fullMask = redMask1 + redMask2
blueHue = 60
HSVImage[:, :, 0] = np.where(fullMask == 255, blueHue, HSVImage[:, :, 0])
finalImage = cv2.cvtColor(HSVImage, cv2.COLOR_HSV2BGR)
cv2.imwrite('C:/Users/admin/Desktop/out.png', finalImage)