I am trying to find the regions of a gray-level image. However I really need that MSER only considers regions in the foreground and not in the background. For my example the background is considered as all the pixels with value 0.
For example , the function loadAllImages is previously defined and it returns the image and the background. The image in gray level and the foreground as 255 for the region of interest and 0 for the rest.
image, foreground= loadAllImages() image1 = cv2.bitwise_and(image,image, mask=foreground)
At this point I have the image1 matrix as image with a mask. However, when I apply MSER, I always get regions in the background.
mser = cv2.MSER_create( 5, # delta 60, # min_area 14400, #max_area .5, # max_variation .0002, # min_diversity 5, # max_evolution 1.01, # area_threshold 0.003, # min_margin 5) # edge_blur_size regions, bboxes = mser.detectRegions(image1) regions = sorted(regions, key=cv2.contourArea, reverse=True)
To plot the regions that I am getting:
img_mser = cv2.cvtColor(image1, cv2.COLOR_GRAY2RGB) for p in regions[:]: for k in p: cv2.circle(img_mser, (k,k), radius=0, color=(0, 0, 255), thickness=-1) plt.imshow(img_mser)
If anyone can help me to find a way to mask the image in order to define the limits for MSER to find regions only in the foreground, I will really appreciate it.