At first the problem seemed simple to me, my idea was to use blob analysis to detect various drops, group them by size and use the flood-fill algorithm to color them.
However, I ran into some problems with the default values ββfor blob analysis, which I did not change, which was worth some time. In addition, I did not find snippets of code for python to fill fluorescence or stain droplets using OpenCV, and there were some syntactic changes for using SimpleBlobDetection compared to older versions, for which I could only find a small documentation and sample code. Therefore, perhaps all of this code may also be useful to other users.
I hope that I correctly identified the segments that you wanted to find. If you want not to include large dark outer leaves, there is a comment line.
For visualization, you can resize the image (remember at the moment, do not forget to adapt the dimensional thresholds, respectively, to 4 * 4 = 16)

The code is somewhat long with all these parameters, but I hope it is easy to read. I learned a lot from analyzing blob with OpenCV working on this issue, thanks!
Good image, by the way.
import numpy as np import cv2 im = cv2.imread('tricky.png')
source share