Поиск формы изображения в другом изображении - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь определить лучший способ найти положение фигуры на изображении. У меня есть изображение части пазла с белым контуром.

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

Как лучше всего это сделать? OpenCV, emgucv, ML?

Пример. кусок пазла https://imgur.com/a/PJJ6ixL

Спасибо

1 Ответ

0 голосов
/ 11 августа 2020

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

//Read in the image
Mat puzzlePiece = CvInvoke.Imread("Puzzle\Piece\path", ImreadModes.AnyColor);

//Create a grayscale version of the image
Mat puzzlePieceGray = new Mat();
CvInvoke.CvtColor(puzzlePiece, puzzlePieceGray, ColorConversion.Bgr2Gray);

//Black image to draw contours on
Image<Bgr, byte> output = new Image<Bgr, byte>(puzzlePiece.Width, puzzlePiece.Height, 
    new Bgr(Color.Black));

VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();

//Find and draw the found contours
CvInvoke.FindContours(puzzlePieceGray, contours, null, RetrType.External, 
    ChainApproxMethod.ChainApproxSimple);
CvInvoke.DrawContours(output, contours, -1, new MCvScalar(255, 0, 0));

//Display the found contours
CvInvoke.Imshow("Contours Drawn", output);
CvInvoke.WaitKey(0);

Исходное изображение

enter image description here

The Image with Contours

введите описание изображения здесь

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

if (contours[0].Size == contoursTwo[0].Size)
{
    //do stuff
}
...