I don't know if I interpreted your question right, but you want to contour all colored semi-circle things on screen right?
What I'd do is use opencv to convert to gray, then threshold it, then use that to find and draw contours.
You could also fill those contours, then you'd have white semi-circles on a black background.
Like this:
image= cv2.imread(r"./colors.png")
imgray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(imgray, 127, 255, 0)
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
image = cv2.drawContours(image, contours, -1, (255, 255, 255), 2)
cv.imshow("cont", image)
cv.waitKey(2000)
img_pl = np.zeros((1000,1000))
cv2.fillPoly(img_pl,pts=contours,color=(255,255,255))
cv2.imshow("polyfilled", img_pl)
Now, you'll have to play around with the thresholding as I see it does not detect everything. I did this very quick befre work so I diddled some, my apologies for that.