Использование emgucv c # ...
Я хочу найти изображение объекта, находящегося внутри другого изображения.
Чтобы проверить мой код, я обрезаю изображение, которое ищу вИсходное изображение и сохраните его как Template.jpg.
Затем я использую эту процедуру, которая находит шаблонное изображение внутри исходного изображения:
private Point Detect_object(
Image<Gray, Byte> Area_Image,
Image<Gray, Byte> image_object )
{
//Work out padding array size
Point dftSize = new Point( Area_Image.Width + ( image_object.Width * 2 ), Area_Image.Height + ( image_object.Height * 2 ) );
//Pad the Array with zeros
using ( var pad_array = new Image<Gray, Byte>( dftSize.X, dftSize.Y ) )
{
//copy centre
pad_array.ROI = new Rectangle( image_object.Width, image_object.Height, Area_Image.Width, Area_Image.Height );
CvInvoke.cvCopy( Area_Image, pad_array, IntPtr.Zero );
pad_array.ROI = ( new Rectangle( 0, 0, dftSize.X, dftSize.Y ) );
//Match Template
using ( var result_Matrix = pad_array.MatchTemplate( image_object, TemplateMatchingType.CcoeffNormed ) )
{
Point[] MAX_Loc, Min_Loc;
double[] min, max;
//Limit ROI to look for Match
result_Matrix.ROI = new Rectangle( image_object.Width, image_object.Height, Area_Image.Width - image_object.Width, Area_Image.Height - image_object.Height );
result_Matrix.MinMax( out min, out max, out Min_Loc, out MAX_Loc );
_location = new Point( ( MAX_Loc[ 0 ].X ), ( MAX_Loc[ 0 ].Y ) );
var Results = result_Matrix.Convert<Gray, Double>();
return _location;
}
}
}
и вызываю это с помощью:
Image<Bgr, Byte> My_Image = new Image<Bgr, Byte>("d:\\original.jpg");
Image<Gray, Byte> My_Image_Gray = My_Image.Convert<Gray, Byte>();
Image<Gray, Byte> Template = new Image<Gray, Byte>("d:\\template.jpg");
var pt = Detect_object( My_Image_Gray, Template );
My_Image.Draw(new CircleF(new PointF(pt.X, pt.Y), 10), new Bgr(0, 0, 255));
My_Image.Save("D:\\result.jpg");
Теперь это работает нормально.
Итак, я подумал, что если бы у меня было несколько шаблонов под разными углами и освещением и т. Д., Я мог бы попытаться сделать свой собственный классификатор (каким-то образом - мне нужно изучитьhow)
Но сначала я подумал, что давайте уменьшим размер исходного изображения и повторно запустим код.
На этот раз он не нашел шаблон.
Так же как и шаблонсопоставление сделано по размеру?Если да, то какие еще методы я могу изучить?
спасибо