Я новичок в OpenCV и создаю систему OMR (Optical Mark Recognition) в Java, чтобы определить ответы на листе с несколькими вариантами ответов. Я создал форму, состоящую из одного большого прямоугольника, который используется для ответа на вопросы путем рисования правильного круга и одного меньшего прямоугольника, который предназначен для определения уникального числа, которое является идентификатором того, кто отвечает. Вот изображение формы:
Теперь моя программа определяет верхний прямоугольник AM, но не может определить больший. Мое изображение проходит через 6 этапов 1-го расширения, 2-го серого, 3-го порога, 4-го размытия, 5-го канни и 6-го адаптивного порога. Здесь вы можете видеть, что
dilated1 = new Mat(source1.size(), CV_8UC1);
dilate(source1, dilated1, getStructuringElement(MORPH_RECT, new Size(3, 3)));
gray1 = new Mat(dilated1.size(), CV_8UC1);
cvtColor(dilated1, gray1, COLOR_BGR2GRAY);
thresh1 = new Mat(gray1.rows(), gray1.cols(), gray1.type());
threshold(gray1, thresh1, 0, 255, THRESH_BINARY + THRESH_OTSU );
blur1 = new Mat(thresh1.size(), CV_8UC1);
blur(gray1, blur1, new Size(5.,5.));
canny1 = new Mat(blur1.size(), CV_8UC1);
Canny(blur1, canny1,160, 80);
adaptiveThresh1 = new Mat(canny1.rows(), gray1.cols(), gray1.type());
adaptiveThreshold(canny1, adaptiveThresh1, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 11,2);
Я также использую findContours как этот
findContours(adaptiveThresh1.clone(), contours1, hierarchy1, RETR_TREE, CHAIN_APPROX_SIMPLE);
Я создал два разных класса java, потому что есть другие вещи обнаружить в маленьком прямоугольнике, а другие в большем. Код выше - то, что я использую, чтобы попытаться обнаружить больший прямоугольник. Я пробовал много разных чисел на всех этапах и все еще ничего.
Когда я использую только больший прямоугольник на изображении, он работает просто отлично, но в сочетании с другим он не может его обнаружить. Это для моей диссертации и это действительно важно для меня. Любая помощь приветствуется, и если вы хотите, чтобы я добавил ее, пожалуйста, дайте мне знать.