У меня есть набор изображений, которые представляют символ (буква «О»), написанный от руки по-разному. Я хочу сопоставить это с изображением рукописного текста и нарисовать рамку вокруг него. Я сталкивался с использованием 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.");
}
}
Любая помощь или совет будут высоко оценены в отношении которых я может двигаться вперед, чтобы достичь этого.