如何替换图像中彩色对象的颜色?

How to replace color for colored objects in image?

我正在尝试检测视频图像中的边缘,但 canny 等边缘检测方法效果不佳,可能是由于框的颜色与地板颜色或亮度之间的相似性,所以我想找到一种方法使所有红色和蓝色框看起来尽可能白,或者可能是为每一帧尽可能完美地检测边缘的最佳方法,因为这是最终目标。

那我建议你使用颜色跟踪。

  1. 转换为 HSV

cv2.bgr2hsv

为什么是 hsv?即使亮度发生变化,您仍然可以检测到该颜色

  1. 过滤

您可以使用cv2.inrange

  1. 降噪

使用cv2.Gaussianblur

  1. 修容

使用cv2.findContours

  1. 求边 使用你的方法

对盒子的每种颜色重复此步骤

希望对您有所帮助

只是为了完成我对你的问题的评论。可以使用 HSV/HLS 色彩空间,并将 inRanges 与 Hue 通道一起使用。例如:

import numpy as np
import cv2

# load image and threshold it
original = cv2.imread("a.jpg")
hsvframe = cv2.cvtColor(original, cv2.COLOR_BGR2HLS)
mask = cv2.inRange(hsvframe, (160,40,40), (180, 255, 255))
mask = mask +  cv2.inRange(hsvframe, (0,40,40), (12, 255, 255)) # color red is at the beginning and end of the hue wheel

original[mask==255] = (0,255,0)
cv2.imshow("image", original)

cv2.waitKey(0)
cv2.destroyAllWindows()

需要记住的事情,色调在 np.uint8 中从 0-180 变化。这意味着如果您需要色调 300-360,则限制将为 150-180。其他两个值是 0-255,其中 255 = 100%。

这段小代码的结果是:

它并不完美,但可以使用其他答案建议的方法对其进行改进。我希望这有帮助。