Перейти к содержимому
Compvision.ru
kirviza

phaseCorrelate

Recommended Posts

Не могу найти ошибку, код маленький но что то туплю.

#include "stdafx.h"

#include <stdio.h>

#include <iostream>

#include <cv.h>

#include "opencv2/core/core.hpp"

#include "opencv2/features2d/features2d.hpp"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/nonfree/nonfree.hpp"


using namespace cv;

using namespace std;


int main(int, char* [])

{  Mat hann;

   Mat img1=imread("image1.jpg",0);

   Mat img2=imread("image2.jpg",0);

   createHanningWindow(hann, img2.size(), 0);

   cout<<"ok1"<<endl;

   Point2d shift = phaseCorrelate(img1, img2, hann);

   cout<<"    "<<shift.x<<"     "<<shift.y<<endl;

   cvWaitKey(0);


	return 0;

}

просто надо посчитать смещение) я сделал тоже самое через cvMatchTemplate.

суть задания это объединить матрицу изображений 12х14, они накладываются друг на друга по оси Х и по оси У.

cvMatchTemplate работает хорошо, но когда много изображений то получаются небольшие сдвиги.А мне 4-5 пикселей это уже большое смещение.

хотел разобраться с этой функцией, мб она лучше работать будет)

Подскажите что тут не так

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://docs.opencv.org/trunk/modules/imgproc/doc/motion_analysis_and_object_tracking.html#phasecorrelate

src1 – Source floating point array (CV_32FC1 or CV_64FC1)

src2 – Source floating point array (CV_32FC1 or CV_64FC1)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

и что это значит?теорию я тоже нашел только не понимаю что это.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот исправил но теперь ругается на размер изображения 2

#include "stdafx.h"

#include <stdio.h>

#include <iostream>

#include <cv.h>

#include "opencv2/core/core.hpp"

#include "opencv2/features2d/features2d.hpp"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/nonfree/nonfree.hpp"


using namespace cv;

using namespace std;


int main(int, char* [])

{  Mat hann,img164f,img264f;

   Mat img1=imread("image1.png",0);

   Mat img2=imread("image2.png",0);

   createHanningWindow(hann, img2.size(),CV_64F);

   cout<<"ok1"<<endl;

   img1.convertTo(img164f, CV_64F);

   img2.convertTo(img264f, CV_64F);

   Point2d shift = phaseCorrelate(img164f, img264f, hann);

   cout<<"    "<<shift.x<<"     "<<shift.y<<endl;

   cvWaitKey(0);


        return 0;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Изображения image1.png и image2.png по размерам одинаковые?

ЗЫ: посмотрите пример:

opencv\samples\cpp\phase_corr.cpp

хотя похоже, что Вы именно его и взяли за основу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я его и взял за основу, просто теперь хочу переделать что бы не с видео было все, а просто изображения загружались с компа и находило смещение

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот ошибка вылетает

и по размерам все одинаковое,старался делать все как по примеру

post-6211-0-91561900-1359044808_thumb.pn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тип элементов первого и второго не сходится, а не размер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да вроде все хорошо по типу, в коде вроде все одного типа, я только .png на .jpg поменял

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у вас как изображения перекрываются полностью, но сдвиг 5 пикселей? или 5 пикселей это перекрытие?

а как вы использовали cvMatchTemplate?

ошибка явно что то с типом.

вот попробуйте

http://www.compvision.ru/forum/index.php?showtopic=319&view=findpost&p=8330

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

разрешение изображений 1368х1023, между ними идет перекрытие пикселей 100-150, около этого.Как я использовал мачинг, я приблизительно знаю где будет прекрытие, из второго изображения вырезал эту небольшую часть, потом узнавал координаты где оно должно стоять на первом изображении а затем присоединял второе изображение к первому.Просто хочу понять как работает фазовая корреляциия, и почему мой код не работает а жалуется на типы данных, вроде бы все одного типа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

посмотрите в дебагере(хотя тип не помню может и не покажет и надо ставить доп. дебагер http://www.compvision.ru/forum/index.php?showtopic=1116), хотя пример всё равно должен был работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×