首页 > 解决方案 > 如何输出仅包含指定颜色范围的图像?

问题描述

我只想要输出图像中的紫色车道。

import cv2
import numpy as np

img = cv2.imread("minimap_example.png")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #hsv image

lower_purple = np.array([154,135,160])
upper_purple = np.array([167,90,235])

mask = cv2.inRange(hsv, lower_purple, upper_purple)

lane = cv2.bitwise_and(img, img, mask=mask)
cv2.imwrite("laneOnly.png", lane)

但是输出图像根本不正确: 在此处输入图像描述

如何解决此错误?

标签: pythonopencvrgbcv2hsv

解决方案


你做错了两件事:

  • 您正在使用 RGB 范围/值,但您正在将图像转换为 HSV。为简单起见,将其保留为 RGB(即使 HSV 是正确的方法)。
  • 您以 RGB 顺序表示它们,但图像是 BGR,因此请切换值的顺序。此外,使范围更宽一些......否则你什么也得不到。

我建议你做这样的事情:

import cv2

img = cv2.imread("minimap_example.png")

lower_purple = (100, 45, 120) # you might want to refine these
upper_purple = (260, 105, 200) # you might want to refine these

mask = cv2.inRange(img, lower_purple, upper_purple)

lane = cv2.bitwise_and(img, img, mask=mask)
cv2.imwrite("laneOnly.png", lane)

你会得到这个输出: 在此处输入图像描述


推荐阅读