Обработка изображения путем проверки объекта одного изображения буквы происходит в другом рукописном текстовом изображении - PullRequest
1 голос
/ 19 февраля 2020

У меня есть набор изображений, которые представляют символ (буква «О»), написанный от руки по-разному. Я хочу сопоставить это с изображением рукописного текста и нарисовать рамку вокруг него. Я сталкивался с использованием Template matching algorithm, но это не дает ожидаемого результата. Я пробовал различные алгоритмы сопоставления функций, и я довольно новичок в обработке изображений. Я делаю это с OpenCV 3.4.9 и Java, где я тестирую его на настольном компьютере, и позже я хочу преобразовать его в приложение. Вот что происходит с 1 изображением буквы «О» и образцом рукописного текста.:

РЕДАКТИРОВАТЬ: пришлось повторить вопрос, так как мой предыдущий вопрос был отменен из-за неправильной формулировки вопроса

Буква 'O' Изображение, написанное от руки, необходимое для сопоставления.

Рукописный текст Изображение, которое представляет собой букву 'O', должно быть

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

Ожидаемый вывод , который я я должен получить.

Код, который у меня есть, выглядит следующим образом (основываясь на статье, которую я нашел некоторое время назад):

import org.opencv.core.Core;
import org.opencv.core.Core.MinMaxLocResult;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class TemplateMatch {

  public static void main(String[] args) {

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    Mat source=null;
    Mat template=null;
    String filePath="./pics/";
    //Load image file
    source=Imgcodecs.imread(filePath+"HandText.jpg");
    template=Imgcodecs.imread(filePath+"o.png");

    Mat outputImage=new Mat();    
    int machMethod=Imgproc.TM_CCOEFF;
    //Template matching method
    Imgproc.matchTemplate(source, template, outputImage, machMethod);


    MinMaxLocResult mmr = Core.minMaxLoc(outputImage);
    Point matchLoc=mmr.maxLoc;
    //Draw rectangle on result image
    Imgproc.rectangle(source, matchLoc, new Point(matchLoc.x + template.cols(),
            matchLoc.y + template.rows()), new Scalar(255, 255, 255));

    Imgcodecs.imwrite(filePath+"output.jpg", source);
    System.out.println("Completed.");
   }

}

Любая помощь или совет будут высоко оценены в отношении которых я может двигаться вперед, чтобы достичь этого.

...