Сканирование листа OMR с использованием OpenCV в Python - PullRequest
0 голосов
/ 20 марта 2020

Когда я сканирую лист OMR для обнаружения контуров, он не обнаруживает все прямоугольники. шаги, как показано ниже:

  1. Загрузка цветного изображения
  2. Преобразование в серый и изменение размера
  3. Размытие изображения с помощью GaussianBlur
  4. Обнаружение края с помощью Canny
  5. Поиск контуров
  6. Визуализация результатов

Но он показывает не все прямоугольники. Может ли кто-нибудь помочь мне решить эту проблему.

Прикрепленный лист OMR для справки:

Input OMR sheet

1 Ответ

1 голос
/ 21 апреля 2020

Мой совет следующий:

  1. загрузить изображение
  2. img в серый
  3. размытие и четкость
  4. применить контур
  5. печать контуров и сортировка их по контурам
  6. рисование контуров, если они имеют одинаковую область (поскольку все интересующие вас области имеют одинаковую форму)
import cv2
import numpy as np

img=cv2.imread('test.png') #read image
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #turn image to gray
blur = cv2.GaussianBlur(gray,(3,3),0) #add blur
edges = cv2.Canny(blur,50,100) #find edges

contours, hierarchy = cv2.findContours(edges,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) #find contours
cv2.drawContours(img,contours,-1,(0,255,0),2) #draw contours
cv2.imshow('Contours in Green',img) #show contours in green

#Now you need to sort them out.

Output of all the contours

...