如何使用 OpenCV 转换颜色?

我正在努力将红色转换为另一种颜色,蓝色,黄色,绿色等。


我已经实现了将红色转换为灰度颜色,如下所示。


    img2 = cv2.imread('output2.jpg')

    img_hsv=cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)


    # lower mask (0-10)

    lower_red = np.array([0,50,50])

    upper_red = np.array([10,255,255])

    mask0 = cv2.inRange(img_hsv, lower_red, upper_red)


    # upper mask (170-180)                                                                                                                                                        

    lower_red = np.array([170,50,50])    

    upper_red = np.array([180,255,255])    

    mask1 = cv2.inRange(img_hsv, lower_red, upper_red)    


    # join my masks    

    mask = mask0+mask1    


    output_img = img2.copy()    

    output_img[np.where(mask!=0)] = 125

但我真正想要实现的是将一种颜色变成另一种颜色,而不是灰度。我应该如何更改代码或任何好的参考?谢谢你。


PIPIONE
浏览 228回答 1
1回答

Qyouu

您将值 125 用于掩码中的所有点:output_img[np.where(mask!=0)] = 125如果要更改为彩色像素,只需为该像素分配一个颜色数组,例如:output_img[np.where(mask!=0)] = [125, 50, 50] #RGB array完整代码:import numpy as npimport cv2import matplotlib.pyplot as pltimg2 = cv2.imread('sample.png')img_hsv=cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)# lower mask (0-10)lower_red = np.array([50,50,0])upper_red = np.array([255,255,50])mask0 = cv2.inRange(img_hsv, lower_red, upper_red)# upper mask (170-180)                                                                                                                                                        lower_red = np.array([50,50,50])    upper_red = np.array([255,255,180])    mask1 = cv2.inRange(img_hsv, lower_red, upper_red)    # join my masks    mask = mask0+mask1    output_img = img2.copy()    output_img[np.where(mask!=0)] = [125, 50, 50]plt.imshow(img2)plt.title('Original')plt.show()plt.imshow(output_img)plt.title('After')plt.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python