Сначала преобразуйте ваше цветное изображение в оттенки серого. Затем примените порог, скажем, ноль, чтобы получить двоичное изображение. Возможно, вам придется использовать морфологические операции для дальнейшей обработки двоичного изображения, если есть дыры. Затем найдите контуры этого изображения и нарисуйте их на новом изображении.
* +1012 *
Ниже приведен простой код с использованием opencv 4.0.1
в python 2.7
.
bgr = cv2.imread('puzzle.png')
gray = cv2.cvtColor(bgr, cv2.COLOR_BGR2GRAY)
_, roi = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)
cv2.imwrite('/home/dhanushka/stack/roi.png', roi)
cont = cv2.findContours(roi, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
output = np.zeros(gray.shape, dtype=np.uint8)
cv2.drawContours(output, cont[0], -1, (255, 255, 255))
# removing boundary
boundary = 255*np.ones(gray.shape, dtype=np.uint8)
boundary[1:boundary.shape[0]-1, 1:boundary.shape[1]-1] = 0
toremove = output & boundary
output = output ^ toremove