1 つの要求は、画像の赤い部分を青い部分に変換することです。最初のアプローチは、チャネルの交換を使用して問題を解決することですが、これによりいくつかの混合色の色変換が発生する可能性があります。例えば、オレンジ色が紫色に変わります(黄 + 赤 || 黄緑 + 青)。
別のアプローチは、色空間変換です。1 つの空間で問題を解決できない場合、座標変換を使用して別の空間に変換して解決し、それから元の空間に戻すことができます。そして、別の空間では、私たちの操作が元の空間に予期しない操作を加えることはありません。
実装コード:
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)