В своем ответе я предположил, что другие части, которые вы хотите обнаружить, будут иметь точный тот же белый контур, что и приведенный образец. Я просто использовал метод поиска контуров в 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);
Исходное изображение
The Image with Contours
введите описание изображения здесь
Поскольку есть только исходное изображение, которое вы предоставили, я не могу сравнить размер контура с другими частями, но вот пример кода того, как это могло бы работать.
if (contours[0].Size == contoursTwo[0].Size)
{
//do stuff
}