try {
//capture = new VideoCapture(openFileDialog.FileName);
float threshold = 0.1f;
var imgScene = new Image<Bgr, byte>(openFileDialog.FileName);
Mat imgOut = new Mat();
CvInvoke.MatchTemplate(imgScene, template, imgOut, Emgu.CV.CvEnum.TemplateMatchingType.Sqdiff);
Mat imgoutNorm = new();
CvInvoke.Normalize(imgOut, imgoutNorm,0,1, Emgu.CV.CvEnum.NormType.MinMax);
Matrix<double> matches = new Matrix<double>(imgoutNorm.Size);
imgoutNorm.CopyTo(matches);
double minValue = 0, maxVal = 0;
Point minLoc = new Point();
Point maxLoc = new Point();
do
{
CvInvoke.MinMaxLoc(matches, ref minValue, ref maxVal, ref minLoc, ref maxLoc);
Rectangle r = new Rectangle(minLoc, template.Size);
CvInvoke.Rectangle(imgScene, r, new MCvScalar(255, 0, 0), 1);
matches[minLoc.Y, minLoc.X] = 0.5;
matches[maxLoc.Y, maxLoc.X] = 0.5;
} while (minValue <= threshold);
pictureBox1.Image = imgScene.AsBitmap();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
от дебажил и понял что просто minValue всегда 0. но вот в примере все то же = но на видео оно норм не зацикляется.
кто подскажет - сарказм и троллинг мимо -
думаю что это
CvInvoke.MinMaxLoc(matches, ref minValue, ref maxVal, ref minLoc, ref maxLoc);
должно было как то это регулировать походу раз ссылки + переменная макс меняется.