为什么我无法从图像中去除西红柿的红色?
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)
输出:
我尝试了来自 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)
输出: