Вырезание определенных сегментов изображения с помощью cv2

Образец изображения

Я отсканировал копию страницы, состоящей из нескольких вопросов. Теперь я хочу вырезать отдельные вопросы индивидуально. пример:  индивидуальный вопрос

Я использую следующую логику: 1. Поиск контуров.

kernal = np.ones((2, 20), np.uint8)
img_dilation = cv2.dilate(self.img, kernal, iterations=1)
im2, contr, _ = \
        cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
sorted_ctrs = sorted(contr, key=lambda ctr: cv2.boundingRect(ctr)[0])
  • Теперь мы знаем, что номера вопросов - это места, из которых мы хотим вырезать изображение, и все числа лежат перед полем .. Так что вырезание изображения в точке, где координата x обратного отсчета меньше определенного поля, было бы хорошим местом для Начать с.

Но проблема в том, что эти номера вопросов не всегда обводятся контурами.

Есть ли другие более эффективные и точные способы вырезать вопросы со всей страницы.


person Prashant Pandey    schedule 09.03.2018    source источник


Ответы (1)


Это самый простой и первый метод, который я бы попробовал:

Во-первых, вы можете легко обрезать два столбца, найдя место длинной вертикальной линии, разделяющей их.

По каждому из столбцов: если ваш документ отсканирован выровненным образом, вы можете просмотреть горизонтальную проекцию одного столбца. Я могу заметить, что существует значительный разрыв между окончанием каждого вопроса и началом следующего.

Когда вы вычисляете горизонтальную проекцию, везде, где вы получаете много нулей, это означает окончание вопроса и начало следующего.

person Saania    schedule 09.03.2018