1 回答
TA贡献1813条经验 获得超2个赞
根据我对您的“相似颜色” 的理解,您需要将蓝色及其变体转换为红色。我会给你一个在 OpenCV 中执行此操作的解决方案。在 HSV 颜色空间而不是 RGB 中分割颜色更容易,以创建颜色在该范围内的掩码cv2.inRange。
在创建一个值为 255 和 0 的掩码后,我将其除以 255 以将其转换为 1 和 0,然后将其转换为布尔值。然后就像您在问题中显示的那样,只要掩码正确,就会放置新颜色。编码:
import cv2
import numpy as np
img = cv2.imread('2.jpg')
res = img.copy()
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_green = np.array([40,50,50])
upper_green = np.array([80,255,255])
r2, g2, b2 = 255, 0, 0
mask = cv2.inRange(hsv, lower_green, upper_green)
mask = mask/255
mask = mask.astype(np.bool)
res[:,:,:3][mask] = [b2, g2, r2] # opencv uses BGR
cv2.imshow('image', img)
cv2.imshow('Result', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果
我转换了绿色,因为这张图片中的蓝色非常少。您可以将[100, 50, 50]其用作较低范围和[130, 255, 255]较高范围。
添加回答
举报