【问题标题】:how to set all pixels of a range of HSV values to another value in openCV with python?如何使用python将一系列HSV值的所有像素设置为openCV中的另一个值?
【发布时间】:2019-03-27 07:28:59
【问题描述】:

我正在将 OpenCV 与 python 一起使用。我想用“white”颜色替换颜色范围。

颜色范围:

HMin = 130
SMin = 65
VMin = 135
HMax = 200
SMax = 160
VMax = 255

我知道如何将特定像素值替换为另一个值:

im[np.where((im == [20,78,90]).all(axis = 2))] = [0,0,100]
cv2.imwrite('output.png', im)

那么,您知道我如何使用此方法将 一个范围内的所有像素 的 HSV 值而不是特定的像素值设置为另一个值吗?

【问题讨论】:

  • 用 cv2.inRange 得到一个二进制图像,然后你可以做im[binaryImage == 255] = [0,0,100]
  • @api55 你的意思是HSV-img = cv2.cvtColor(original-img, cv2.COLOR_BGR2HSV) minR = np.array([HMin, SMin, VMin]) maxR = np.array([HMax, SMax, VMax]) orange-mask = cv2.inRange(HSV-img, minR , maxR) original-img[orange-mask]=[0,0,100]
  • 看看答案,@Silencer 做了我想说的,有图片和一切:) 但你所说的或多或少是 original-img[orange-mask > 0] =[0,0,100]

标签: python opencv


【解决方案1】:

使用inRange找到掩码,然后将原始图像替换为其他值。

以下是将绿色范围替换为红色。

import numpy as np
import cv2

img = cv2.imread( "sunflower.jpg" )

## convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

## mask of green (36,0,0) ~ (70, 255,255)
mask = cv2.inRange(hsv, (36, 0, 0), (70, 255,255))
bak = img.copy()

# replace with red 
bak[mask > 0] = (0, 0, 255)

cv2.imwrite("bak.png", bak)

一些链接:

  1. How to define a threshold value to detect only green colour objects in an image :Opencv

  2. How to change the image color when the pixels hsv values are in specific ranges?

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 2014-01-16
    • 2020-05-18
    • 1970-01-01
    • 2019-12-10
    • 2018-12-12
    • 1970-01-01
    • 2015-11-27
    相关资源
    最近更新 更多