У меня есть изображение, которое меняет его случайным образом, поэтому иногда OpenCV распознает объект, а иногда нет:
Мой код:
grey_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
grey_temp = cv2.cvtColor(temp, cv2.COLOR_BGR2GRAY)
w, h = grey_temp.shape[::-1]
res = cv2.matchTemplate(grey_img, grey_temp, cv2.TM_CCOEFF_NORMED)
print(res)
threshold = 0.8;
loc = np.where(res >= threshold)
print(loc)
for pt in zip(*loc[::-1]):
cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (255,0,0), 3)
cv2.imshow('win', img)
cv2.waitKey()
Код Симлара с emguCv:
Mat background = CvInvoke.Imread(file,
Emgu.CV.CvEnum.ImreadModes.AnyColor);//Convert Image to ReducedGrayscale2
Mat find = CvInvoke.Imread(compered, Emgu.CV.CvEnum.ImreadModes.AnyColor);
Mat match = CvInvoke.Imread(compered, Emgu.CV.CvEnum.ImreadModes.AnyColor);
CvInvoke.MatchTemplate(background, find, match, TemplateMatchingType.CcoeffNormed);
double[] minValues, maxValues;
Point[] minLocations, maxLocations;
match.MinMax(out minValues, out maxValues, out minLocations, out maxLocations);
if (maxValues[0] > 0.7)
{
Console.WriteLine("found");
Rectangle match1 = new Rectangle(maxLocations[0],);
match.Draw(match1, new Bgr(Color.Red), 3);
}
CvInvoke.Imshow("Image1", background);
CvInvoke.WaitKey(0);
(Кстати, изменение порога не влияет)
Пример распознавания:
Я хочу знать, есть ли у вас какая-то идея, как мне удается отслеживать один и тот же объект рисунка на фотографии без зависимости от цвета, оттенков серого или его местоположения ( у объекта есть некоторые схожие общие свойства, поэтому в человеческом глазу он называется легко отслеживаемым).
Я пытался проделать тот же прогресс с emguCv для c, чтобы проверить, есть ли другие результаты в результате, но никаких сюрпризов , нет разницы. Я был бы признателен, если бы вы могли предложить мне, как управлять шаблоном в основном изображении. Заранее спасибо!