【问题标题】:How to define boundaries for HSV color in OpenCV如何在 OpenCV 中定义 HSV 颜色的边界
【发布时间】:2021-09-27 04:59:53
【问题描述】:

我试图使用色彩空间执行图像分割。例如,乡村地区。我不确定如何为cv2.inRange() 选择边界。

img = cv2.imread(file)
img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_bound = np.array([0,70,70])
upper_bound = np.array([20,200,150])
mask0 = cv2.inRange(img_hsv, lower_bound, upper_bound)

lower_bound = np.array([170,70,70])
upper_bound = np.array([180,200,150])
mask1 = cv2.inRange(img_hsv, lower_bound, upper_bound)

# add both masks
mask = mask0+mask1

output_img = cv2.bitwise_and(img,img,mask=mask)

【问题讨论】:

标签: python opencv image-processing computer-vision


【解决方案1】:

如果您只尝试分割生锈的部分而不是其他部分,我尝试了一些代码如下。

import cv2
import numpy as np

img = cv2.imread("rust1.png",1)
img_hsv=cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_bound = np.array([120, 80, 0],dtype="uint8")
upper_bound = np.array([255, 255, 80],dtype="uint8")
mask0 = cv2.inRange(img_hsv, lower_bound, upper_bound)
cv2.imshow("mask",mask0)
output_img1 = cv2.bitwise_and(img,img,mask=mask0)

lower_bound = np.array([100,50,50])
upper_bound = np.array([205,205,88])
mask1 = cv2.inRange(img_hsv, lower_bound, upper_bound)
output_img2 = cv2.bitwise_and(img,img,mask=mask1)
cv2.imshow("mask1",mask1)

final = cv2.bitwise_or(output_img1, output_img2)

cv2.imshow("rust",np.hstack([img,final]))[![enter image description here][1]][1]

【讨论】:

  • 太棒了!我可以知道你是如何选择边界的吗?例如[120, 80, 0], [255, 255, 80]
  • @Eden 只玩那些 HSV 范围。正常 HSV 范围:H = 0-360,S = 0-100 和 V = 0-100。 Opencv HSV 范围:H:0-179,S:0-255,V:0-255。不同的应用程序对 HSV 使用不同的尺度。参考类似问题link
  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 2012-06-12
  • 2018-10-21
相关资源
最近更新 更多