Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2011, 11:03   #1
МегоВладимир
Новичок
Джуниор
 
Регистрация: 10.03.2011
Сообщений: 1
По умолчанию Вопрос по OpenCV.

Пишу прогу, которая должна делать фотку с веб-камеры, а затем сравнивать изображение лица на сделанной фоке с еще каким-нибудь изображением лица. И если найдутся совпадения выдать результат ТРУ))
Вот в чем проблема:
В библиотеках OpenCV есть такая функция

void cvMatchTemplate(
const CvArr* image,
const CvArr* templ,
CvArr* result,
int method );

где Image - это изображение в котором будем искать
templ - это изображение которое хотим найти в исходном
result - а это непосредственно результат, который возвращает данная функция.
method - метод используемый для сравнения
Мне не понятно как она работает. Я понял, что она возвращает какое-то изображение. Но как проверить похожесть я не знаю.

Далее привожу кусок кода, который непосредственно относится к сравнению:
Код:
int cropWidth = 10;
          int cropHeight = 10;

          Image<Bgr, Byte> sourceImg = new Image<Bgr, byte>("aaa.jpg");
          Image<Gray, Byte> currImg  = sourceImg.Convert<Gray, Byte>().PyrDown().PyrUp();

          Image<Bgr, Byte> thisImg = new Image<Bgr, byte>("bbb.jpg");
          Image<Gray, Byte> templateImg = thisImg.Convert<Gray, Byte>().PyrDown().PyrUp();

          Image<Gray, Byte> padImg = new Image<Gray, byte>(new System.Drawing.Size(currImg.Width + cropWidth + 2, currImg.Height + cropHeight + 2));//.Resize(400, 400, true);

          //Pad the image you are going to match the template on
          System.Drawing.Point offset = new System.Drawing.Point(cropWidth, cropHeight);
          MCvScalar mcv = new MCvScalar();
          CvInvoke.cvCopyMakeBorder(currImg.Ptr, padImg.Ptr, offset, Emgu.CV.CvEnum.BORDER_TYPE.CONSTANT, mcv);
          //Grab a portion of the image to match the template
          int resultWidth = padImg.Width - templateImg.Width / 2 + 1;
          int resultHeight = padImg.Height - templateImg.Height + 1;

          System.IntPtr result = CvInvoke.cvCreateMat(resultHeight, resultWidth, Emgu.CV.CvEnum.MAT_DEPTH.CV_32F);
          //MessageBox.Show(result.ToString());
          CvInvoke.cvSetImageROI(templateImg, new System.Drawing.Rectangle(templateImg.Width / 4, 0, templateImg.Width / 2, templateImg.Height));
          CvInvoke.cvMatchTemplate(padImg, templateImg, result, Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED);
          Image<Gray, Single> resultImg = new Image<Gray, Single>(new System.Drawing.Size(resultWidth, resultHeight));
          CvInvoke.cvCopy(result, resultImg, IntPtr.Zero);
          PictureBox.FromHandle(result);
          templateImg.Save("testTemplate.jpg");
          currImg.Save("padTemplate.jpg");
          resultImg.Save("test.jpg");
Помогите разобраться, кто работал с этим существом. Спасибо!
МегоВладимир вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++, преобразование Хафа для линий с использованием opencv EBorisov Помощь студентам 1 20.02.2011 00:17
Opencv scripto Общие вопросы C/C++ 0 17.02.2011 18:53
Кто работал с OpenCV? belomorinka Общие вопросы C/C++ 0 24.07.2010 20:21
OpenCV marselik Общие вопросы C/C++ 0 23.04.2010 15:35
OpenCV. C++ API. TheVampire Общие вопросы C/C++ 3 11.04.2010 19:41