kirviza 7 Жалоба Опубликовано January 24, 2013 Не могу найти ошибку, код маленький но что то туплю. #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 пикселей это уже большое смещение. хотел разобраться с этой функцией, мб она лучше работать будет) Подскажите что тут не так Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 24, 2013 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) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kirviza 7 Жалоба Опубликовано January 24, 2013 http://docs.opencv.org/trunk/modules/imgproc/doc/motion_analysis_and_object_tracking.html#phasecorrelate и что это значит?теорию я тоже нашел только не понимаю что это. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kirviza 7 Жалоба Опубликовано January 24, 2013 вот исправил но теперь ругается на размер изображения 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; } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 24, 2013 Изображения image1.png и image2.png по размерам одинаковые? ЗЫ: посмотрите пример: opencv\samples\cpp\phase_corr.cpp хотя похоже, что Вы именно его и взяли за основу. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kirviza 7 Жалоба Опубликовано January 24, 2013 я его и взял за основу, просто теперь хочу переделать что бы не с видео было все, а просто изображения загружались с компа и находило смещение Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kirviza 7 Жалоба Опубликовано January 24, 2013 вот ошибка вылетает и по размерам все одинаковое,старался делать все как по примеру Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 24, 2013 Тип элементов первого и второго не сходится, а не размер. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kirviza 7 Жалоба Опубликовано January 24, 2013 да вроде все хорошо по типу, в коде вроде все одного типа, я только .png на .jpg поменял Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 25, 2013 у вас как изображения перекрываются полностью, но сдвиг 5 пикселей? или 5 пикселей это перекрытие? а как вы использовали cvMatchTemplate? ошибка явно что то с типом. вот попробуйте http://www.compvision.ru/forum/index.php?showtopic=319&view=findpost&p=8330 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kirviza 7 Жалоба Опубликовано January 25, 2013 разрешение изображений 1368х1023, между ними идет перекрытие пикселей 100-150, около этого.Как я использовал мачинг, я приблизительно знаю где будет прекрытие, из второго изображения вырезал эту небольшую часть, потом узнавал координаты где оно должно стоять на первом изображении а затем присоединял второе изображение к первому.Просто хочу понять как работает фазовая корреляциия, и почему мой код не работает а жалуется на типы данных, вроде бы все одного типа. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано January 25, 2013 посмотрите в дебагере(хотя тип не помню может и не покажет и надо ставить доп. дебагер http://www.compvision.ru/forum/index.php?showtopic=1116), хотя пример всё равно должен был работать. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах