Я скопировал образец AForge отсюда:
http://www.aforgenet.com/framework/features/template_matching.html
И надеялся, что он будет работать с 2 битмапами в качестве источников, как в следующем коде:
Bitmap findTemplate (Bitmap sourceImage, Bitmap template)
{
// create template matching algorithm's instance
// (set similarity threshold to x.y%, 1.0f = 100%)
ExhaustiveTemplateMatching tm = new ExhaustiveTemplateMatching( 0.4f );
// find all matchings with specified above similarity
TemplateMatch[] matchings = tm.ProcessImage( sourceImage, template ); **// "Unsupported pixel format of the source or template image." as error message**
// highlight found matchings
BitmapData data = sourceImage.LockBits(
new Rectangle( 0, 0, sourceImage.Width, sourceImage.Height ),
ImageLockMode.ReadWrite, sourceImage.PixelFormat );
foreach ( TemplateMatch m in matchings )
{
AForge.Imaging.Drawing.Rectangle( data, m.Rectangle, System.Drawing.Color.White );
// do something else with matching
}
sourceImage.UnlockBits( data );
return sourceImage;
}
Но при вызове TemplateMatch [] matchings = tm.P .... выдает ошибку, упомянутую выше.
Шаблон генерируется следующим образом:
Bitmap templatebitmap=(Bitmap)AForge.Imaging.Image.FromFile("template.jpg");
источник генерируется с помощью веб-камеры kinect, где PlanarImage отформатирован как растровое изображение (метод скопирован откуда-то, но до сих пор работал)
Bitmap PImageToBitmap(PlanarImage PImage)
{
Bitmap bmap = new Bitmap(
PImage.Width,
PImage.Height,
System.Drawing.Imaging.PixelFormat.Format32bppRgb);
BitmapData bmapdata = bmap.LockBits(
new Rectangle(0, 0, PImage.Width,
PImage.Height),
ImageLockMode.WriteOnly,
bmap.PixelFormat);
IntPtr ptr = bmapdata.Scan0;
Marshal.Copy(PImage.Bits,
0,
ptr,
PImage.Width *
PImage.BytesPerPixel *
PImage.Height);
bmap.UnlockBits(bmapdata);
return bmap;
}
Итак, кто-нибудь может мне помочь, где моя ошибка?
Или, может быть, кто-нибудь знает лучший способ сопоставить шаблон с Kinect?
Общая задача состоит в том, чтобы обнаружить известный объект с помощью kinect, в моем случае - резиновой утки.
Спасибо, в сообщении.