为什么我无法从图像中去除西红柿的红色?

Why I can't get the red color of tomatoes out of image?

我尝试了来自 Whosebug 的代码,但它对我显示黑色。我想做的是:

获取此图像的西红柿白色和其他黑色

为了从此图像中获取红色,我使用了以下代码:

import cv2
import numpy as np

img = cv2.imread('test.png')

img = np.copy(img)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_red = np.array([217, 25, 0])
upper_red = np.array([254, 217, 196])

mask = cv2.inRange(hsv, lower_red, upper_red)
#mask = cv2.bitwise_not(mask)

cv2.imwrite('mask.png', mask)
cv2.destroyAllWindows()

结果是这样

感谢阅读

以下改编自您的代码:

import cv2
import numpy as np

img = cv2.imread('test2.png')


img = np.copy(img)
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

lower_red = np.array([225, 0, 0])
upper_red = np.array([255, 200, 200])

mask = cv2.inRange(rgb, lower_red, upper_red)

cv2.imwrite('mask.png', mask)
cv2.destroyAllWindows()

产生这个输出:

我只是删除了到 HSV 的转换(这不是必需的,我猜你的初始下限和上限无论如何都被认为是 RGB 的?)。我尝试了一些限制,但我想,如果您对它们进行更多修改,您可以获得更好的结果。

试试这个 HSV 面膜:

import cv2
import numpy as np

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

lower = np.array([0, 55, 227])
upper = np.array([21, 255, 255])

mask = cv2.inRange(cv2.cvtColor(img, cv2.COLOR_BGR2HSV), lower, upper)
cv2.imshow("Image", mask)
cv2.waitKey(0)

输出: