Ваша проблема лучше всего решается с помощью цветоделения.Для этого вы можете использовать функцию inrange()
( документы ).Это обычно делается лучше всего в цветовом пространстве HSV.Приведенный ниже код показывает, как вы можете это сделать.
Вы можете использовать этот скрипт , чтобы найти диапазоны значений, необходимые для разделения цвета.Он также имеет образец изображения, которое может помочь вам понять, как работает HSV.
Результат:
Только фиолетовый:
Код:
import numpy as np
import cv2
# load image
img = cv2.imread("image.png")
# Convert BGR to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# define range of HSV-color
lower_val = np.array([0,50,80])
upper_val = np.array([179,255,255])
# purple only
#lower_val = np.array([140,50,80])
#upper_val = np.array([170,255,255])
# Threshold the HSV image to get a mask that holds the markings
mask = cv2.inRange(hsv, lower_val, upper_val)
# create an image of the markings with background excluded
img_masked = cv2.bitwise_and(img,img,mask=mask)
# display image
cv2.imshow("result", img_masked)
cv2.waitKey(0)
cv2.destroyAllWindows()