繁体   English   中英

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

[英]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色彩空间,并在Hue通道中使用inRanges。 例如:

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()

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

这个小代码的结果是:

在此处输入图片说明

它不是完美的,但是可以使用另一种答案建议的方法对其进行优化。 我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM