一個需求是將圖片中的紅色部分轉換為藍色部分,最初的想法是通過通道互換來解決,但這可能會產生一些混合色的顏色變換。例如,橙色變為紫色(黃 + 紅 || 黃綠 + 藍)。
另一種思路是色彩空間變換,在一個空間內解決不了的問題,通過坐標變換轉換到另一個空間求解,再轉換回來,而另一個空間裡面我們的操作不會對原空間施加預期之外的操作。
實現代碼:
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)