Python 如何遮罩图像中除内部特定颜色以外的所有内容

Python 如何遮罩图像中除内部特定颜色以外的所有内容,python,image,opencv,image-processing,computer-vision,Python,Image,Opencv,Image Processing,Computer Vision,我有一个图像,我需要把所有的东西都变成黑色,除了绿色和里面有什么颜色。除了绿色,我如何使所有的颜色都是黑色的?绿色里面有什么颜色 我已将彩色图像从RGB转换为BGR,并将BGR转换为HSV。 我为绿色创建了上下两种颜色 根据边界遮罩图像,但当我显示图像时,除绿色外,其他所有内容均为黑色。绿色矩形内的颜色不显示 [] 这里有一个简单的方法: 将图像转换为灰度 隔离绿色的颜色阈值 找到轮廓并填充遮罩 按位and以获得结果 转换为灰度后,我们对阈值进行着色,以获得最小/最大范围内仅包含绿色像素的

我有一个图像,我需要把所有的东西都变成黑色,除了绿色和里面有什么颜色。除了绿色,我如何使所有的颜色都是黑色的?绿色里面有什么颜色

我已将彩色图像从RGB转换为BGR,并将BGR转换为HSV。 我为绿色创建了上下两种颜色 根据边界遮罩图像,但当我显示图像时,除绿色外,其他所有内容均为黑色。绿色矩形内的颜色不显示

[]


这里有一个简单的方法:

  • 将图像转换为灰度
  • 隔离绿色的颜色阈值
  • 找到轮廓并填充遮罩
  • 按位and以获得结果

转换为灰度后,我们对阈值进行着色,以获得最小/最大范围内仅包含绿色像素的遮罩

接下来,我们使用
cv2.fillPoly()

现在我们
cv2.bitwise_和()
来获得结果


获取该区域的外部轮廓并填充。然后将其用作遮罩(ROI),将其反转,并将除反转遮罩为白色外的所有内容变黑。看见建议:在这里提问之前,尝试谷歌或StackOverflow搜索。这是一个可能的副本
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower = np.array([69,206,177], dtype = "uint8")
upper = np.array([69,206,177], dtype = "uint8")

green_mask = cv2.inRange(hsv,lower,upper)
green= cv2.bitwise_and(hsv,hsv,mask=green_mask )

cv2.imshow("Show colors in green ",green)


cv2.waitKey(0)
cv2.destroyAllWindows()
import numpy as np
import cv2

image = cv2.imread('1.png')
original = image.copy()
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([35, 0, 0], dtype="uint8")
upper = np.array([131, 255, 185], dtype="uint8")
mask = cv2.inRange(image, lower, upper)

cnts = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cv2.fillPoly(mask, cnts, (255,255,255))
result = cv2.bitwise_and(original,original,mask=mask)

cv2.imshow('mask', mask)
cv2.imshow('result', result)
cv2.waitKey()