Удалить белые части на этом изображении
У меня есть это изображение, которое является результатом вычитания двух изображений.
Я хочу получить только белый блок на изображении, который отмечен на изображении. Я попробовал немного морфологических операций с помощью этого, этого и некоторых из моей предыдущей работы.
К сожалению, мой код дает мне не то, что я хотел бы иметь.
#new_diff result of subtraction
new_diff= np.array(new_diff, dtype= np.uint8)
kernel = np.ones((7,7), np.uint8)
erosion = cv2.erode(new_diff.copy(),kernel,iterations= 1)
median = cv2.medianBlur(erosion,3)
closing = cv2.morphologyEx(median, cv2.MORPH_CLOSE, np.ones((9,9),np.uint8),iterations=1)
cv2.imshow('closing', closing)
cnts =cv2.findContours(closing.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)[0]
print 'no of cont',len(cnts)
areaArray = []
for i, c in enumerate(cnts):
area = cv2.contourArea(c)
areaArray.append(area)
#first sort the array by area
sorteddata = sorted(zip(areaArray, cnts), key=lambda x: x[0], reverse=True)
#find the nth largest contour [n-1][1]
c = sorteddata[0][1]
#print 'max contour=', c
cv2.drawContours(closing,[c],0,(255,255,255),3)
cv2.imshow('contours', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()
Результат после закрытия выглядит следующим образом.
Но когда я рисую самый большой контур, я получаю это.
В некоторых изображениях часть, которую я хочу, похожа на ту, что отмечена на изображении, но может быть только наполовину. Любая идея, как сделать так, чтобы блок имел самый большой контур, чтобы я мог его вырезать? Заранее спасибо.