我是 OpenCV 的新手,我正在 Java 中创建一个 OMR(光学标记识别)系统,以便检测多项选择纸上的答案。我创建了一个由一个大矩形组成的表格,用于回答通过绘制正确的圆圈和一个较小的矩形来检测问题,该矩形用于检测一个唯一数字,该数字是一个答案的身份。这是表格的图像:
现在我的程序正在检测 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 类,因为在小矩形和更大的矩形中还有其他要检测的东西。上面的代码是我用来尝试检测更大的矩形的代码。我在所有步骤中尝试了许多不同的数字,但仍然没有。
当我只在图像中使用较大的矩形时,它工作得很好,但与另一个矩形结合时,它无法检测到它。这是为了我的论文,对我来说真的很重要。任何帮助表示赞赏,无论您希望我添加什么以帮助您,请告诉我。