با findcontour کانتور هر ناحیه را پیدا کنید سپس ناحیه مربوط به هر کانتور و سپس کلیه نواحی را با هم جمع کنید تا ناحیه نهایی بدست آید .
def unionRects(a,b):
x = min(a[0], b[0])
y = min(a[1], b[1])
w = max(a[0]+a[2], b[0]+b[2]) - x
h = max(a[1]+a[3], b[1]+b[3]) - y
return (x, y, w, h)
def findRects(src):
contours, hierarchy = cv2.findContours(src, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
result = []
for i in range(len(contours)):
if hierarchy[0][i][3] == -1 :
r = cv2.boundingRect(contours[i])
result.append(r)
return result
def findRect(src):
rects = findRects(src)
if len(rects):
result = rects[0]
for i in range(len(rects) -1) :
result = unionRects(result,rects[i+1])
return result
else : return (-1,-1,0,0)
در اینجا تابع findRect ناحیه کلی مربوط به ماسک را شناسایی می کنه.