Reputation: 165
I'm trying to do a mask in cell image just with the ROI, so I applied the contours with OpenCV around the ROI but I've been struggling to get the region inside the contours. I want to have this region inside white and then discard the contours and the rest outside.
cell = cv.imread(original, 0) # original cell image after matching template
imgray = cv.cvtColor(cell,cv.COLOR_BGR2GRAY)
ret,thresh_binary = cv.threshold(imgray,127,255,cv.THRESH_BINARY)
the resulting image is:
And the original is:
from another image after match template and the already marked cell contours, the image that is read in the code:
So basically what I need is to have white in that closed contour region and discard all the rest (i.e. black). Could someone give me some help or hint about how do I do this?
Upvotes: 4
Views: 11406
Reputation: 46670
Here's an approach:
We find contours then fill in the contour with cv2.drawContours()
using -1
for the thickness parameter
To remove the line section, we can use morphological transformations
import cv2
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cnts = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
cv2.drawContours(gray,[c], 0, (255,255,255), -1)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (20,20))
opening = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel, iterations=2)
cv2.imshow('gray', gray)
cv2.imshow('opening', opening)
cv2.imwrite('opening.png', opening)
cv2.waitKey(0)
Upvotes: 9