Минимальный угловой прямоугольник, охватывающий все черные пиксели изображения - PullRequest
1 голос
/ 27 января 2020

Мне нужно получить минимальный угловой прямоугольник, охватывающий все черные пиксели изображения.

Целевые изображения - это отсканированные моно chrome страницы комиксов / манги, которые могут быть в любом положении (переведены и повернуты).

Требуемый результат аналогичен следующему фрагменту, когда все черные пиксели связаны:

_, mono = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(255-mono, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rect = cv2.minAreaRect(contours[0])

Другими словами, мне нужно получить minAreaRect объединения всех контуров, а не только для одного из них.

Как я могу сделать это, используя Python OpenCV?

1 Ответ

3 голосов
/ 27 января 2020

Чтобы сохранить вашу идею, используя контуры, найденные с помощью cv2.findContours, вам просто нужно объединить все ваши контуры, например, используя np.vstack. Так как вам нужны только простые координаты для cv2.minAreaRect, слияние должно быть в порядке. Чтобы получить четыре вершины повернутого прямоугольника, используйте cv2.boxPoints. Наконец, рисование можно выполнить с помощью cv2.polylines.

Вот небольшой фрагмент кода с минимальным примером:

import cv2
import numpy as np

# Some test image
image = 255 * np.ones((300, 300), np.uint8)
cv2.circle(image, (100, 60), 30, 0, 1)
cv2.circle(image, (200, 200), 60, 0, 1)

# Find contours (with respect to OpenCV version); merge them
cnts = cv2.findContours(255-image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = np.vstack(cnts)

# Calculate minAreaRect of merged contours; determine points
pts = np.int32(cv2.boxPoints(cv2.minAreaRect(cnts)))
cv2.polylines(image, [pts], True, 192)

cv2.imshow('image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Это будет изображение:

Output

Надеюсь, это поможет!

----------------------------------------
System information
----------------------------------------
Platform:    Windows-10-10.0.16299-SP0
Python:      3.8.1
NumPy:       1.18.1
OpenCV:      4.1.2
----------------------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...