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

kirviza

Пользователи
  • Количество публикаций

    18
  • Зарегистрирован

  • Посещение

  • Days Won

    1

kirviza last won the day on January 23 2013

kirviza had the most liked content!

Репутация

7 Новичек

О kirviza

  • Звание
    Бывалый
  1. Нехватка памяти

    щас посмотрим)спасибо большое))
  2. Нехватка памяти

    Вот то что вы скинули я так понял это готовые программы уже, или это алгоритмы реализованные на opencv?просто на работе по заданию мне надо сшить сетку-матрицу изображений, я вроде бы сшиваю но все равно видны швы.а вопрос с памятью решился))спасибо за это.
  3. Нехватка памяти

    ну по сути как панорама, я и загружаю всего 2 изображения в цикле, дело думаю в реалайзе))спасибо большое, завтра попробую)
  4. Нехватка памяти

    Короче, ребята такая тема.Суть задания в том что есть матрица изображений 14х12. мне надо в .txt записать координаты каждого изображения, которые описывают где бы оно находилось если бы все изображения объеденить в одно. Изображения накладываются друг на друга. Но вопрос не в opencv. А в другом. Когда я загружаю матрицу изображений допусти 5х5 то все хорошо. А когда уже 14х12 то программа до конца не доходит, из за нехватки памяти.В скринах увидите что перегруз. Как избавится от этого.Я просто с памятью работать не умею. А форум тут хороший, нравится очень.скрины расположены по порядку, от начала запуска проги, и в середине, и ближе к вылету ошибки.
  5. phaseCorrelate

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

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

    вот ошибка вылетает и по размерам все одинаковое,старался делать все как по примеру
  8. phaseCorrelate

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

    вот исправил но теперь ругается на размер изображения 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; }
  10. phaseCorrelate

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

    Не могу найти ошибку, код маленький но что то туплю. #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 пикселей это уже большое смещение. хотел разобраться с этой функцией, мб она лучше работать будет) Подскажите что тут не так
  12. все разобрался,проблема была в самом opencv, в версии. спасибо огромное. зато теперь шарю как библиотеки подключать и что куда тыкать.А то я сами алгоритмы могу немного реализовывать а как что устроенно не знал. даже не знаю как отблагодарить вас.Буду теперь постоянно на форуме у вас зависать и стараться так же помогать другим))если знания будут позволять)
  13. исправил ошибку с загрузкой изображений просто imread поменял на cvLoadImage, теперь другая ошибка, при запуске вылетает как только доходит до int minHessian = 400; SurfFeatureDetector detector( minHessian ); std::vector<KeyPoint> keypoints_1, keypoints_2; detector.detect( img_1, keypoints_1 ); detector.detect( img_2, keypoints_2 ); в чем тут проблема уже? я наверное скоро повешусь, мне интересно зачем такие учебники делать, или я слишком тупой. причем беру так же пример matching_simple.cpp там те же самые ошибки выводит. вот весь код исправленный что теперь в нем не так #include "stdafx.h" #include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #include "opencv2/core/gpumat.hpp" #include "opencv2/core/opengl_interop.hpp" #include "opencv2/ml/ml.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/contrib/contrib.hpp" #include "opencv2/video/tracking.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/nonfree/nonfree.hpp" using namespace cv; int main( int argc, char** argv ) { Ptr<IplImage> img1 = cvLoadImage("image1.jpg", CV_LOAD_IMAGE_GRAYSCALE); Ptr<IplImage> img2 = cvLoadImage("image2.jpg", CV_LOAD_IMAGE_GRAYSCALE); if(img1.empty() || img2.empty()) { printf("Can't read one of the images\n"); return -1; } Mat img_1(img1); Mat img_2(img2); //-- Step 1: Detect the keypoints using SURF Detector int minHessian = 400; SurfFeatureDetector detector( minHessian ); std::vector<KeyPoint> keypoints_1, keypoints_2; detector.detect( img_1, keypoints_1 ); detector.detect( img_2, keypoints_2 ); //-- Step 2: Calculate descriptors (feature vectors) SurfDescriptorExtractor extractor; Mat descriptors_1, descriptors_2; extractor.compute( img_1, keypoints_1, descriptors_1 ); extractor.compute( img_2, keypoints_2, descriptors_2 ); //-- Step 3: Matching descriptor vectors using FLANN matcher FlannBasedMatcher matcher; std::vector< DMatch > matches; matcher.match( descriptors_1, descriptors_2, matches ); double max_dist = 0; double min_dist = 100; //-- Quick calculation of max and min distances between keypoints for( int i = 0; i < descriptors_1.rows; i++ ) { double dist = matches[i].distance; if( dist < min_dist ) min_dist = dist; if( dist > max_dist ) max_dist = dist; } printf("-- Max dist : %f \n", max_dist ); printf("-- Min dist : %f \n", min_dist ); //-- Draw only "good" matches (i.e. whose distance is less than 2*min_dist ) //-- PS.- radiusMatch can also be used here. std::vector< DMatch > good_matches; for( int i = 0; i < descriptors_1.rows; i++ ) { if( matches[i].distance < 2*min_dist ) { good_matches.push_back( matches[i]); } } //-- Draw only "good" matches Mat img_matches; drawMatches( img_1, keypoints_1, img_2, keypoints_2, good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS ); //-- Show detected matches imshow( "Good Matches", img_matches ); for( int i = 0; i < good_matches.size(); i++ ) { printf( "-- Good Match [%d] Keypoint 1: %d -- Keypoint 2: %d \n", i, good_matches[i].queryIdx, good_matches[i].trainIdx ); } waitKey(0); return 0; } что тут не так?помогите пожалуйста, или если есть рабочий пример такого же характера скиньте его. А то реально повешусь дня через 2))))
  14. Вот я убрал эти строки, вот что оставил #include "stdafx.h" #include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #include "opencv2/core/gpumat.hpp" #include "opencv2/core/opengl_interop.hpp" #include "opencv2/ml/ml.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/contrib/contrib.hpp" #include "opencv2/video/tracking.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/nonfree/nonfree.hpp" using namespace cv; int main( int argc, char** argv ) { Mat img_1 = imread( "image1.jpg", CV_LOAD_IMAGE_GRAYSCALE ); Mat img_2 = imread( "image2.jpg", CV_LOAD_IMAGE_GRAYSCALE ); if( !img_1.data || !img_2.data ) { std::cout<< " --(!) Error reading images " << std::endl; return -1; } //-- Step 1: Detect the keypoints using SURF Detector int minHessian = 400; SurfFeatureDetector detector( minHessian ); std::vector<KeyPoint> keypoints_1, keypoints_2; detector.detect( img_1, keypoints_1 ); detector.detect( img_2, keypoints_2 ); //-- Step 2: Calculate descriptors (feature vectors) SurfDescriptorExtractor extractor; Mat descriptors_1, descriptors_2; extractor.compute( img_1, keypoints_1, descriptors_1 ); extractor.compute( img_2, keypoints_2, descriptors_2 ); //-- Step 3: Matching descriptor vectors using FLANN matcher FlannBasedMatcher matcher; std::vector< DMatch > matches; matcher.match( descriptors_1, descriptors_2, matches ); double max_dist = 0; double min_dist = 100; //-- Quick calculation of max and min distances between keypoints for( int i = 0; i < descriptors_1.rows; i++ ) { double dist = matches[i].distance; if( dist < min_dist ) min_dist = dist; if( dist > max_dist ) max_dist = dist; } printf("-- Max dist : %f \n", max_dist ); printf("-- Min dist : %f \n", min_dist ); //-- Draw only "good" matches (i.e. whose distance is less than 2*min_dist ) //-- PS.- radiusMatch can also be used here. std::vector< DMatch > good_matches; for( int i = 0; i < descriptors_1.rows; i++ ) { if( matches[i].distance < 2*min_dist ) { good_matches.push_back( matches[i]); } } //-- Draw only "good" matches Mat img_matches; drawMatches( img_1, keypoints_1, img_2, keypoints_2, good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS ); //-- Show detected matches imshow( "Good Matches", img_matches ); for( int i = 0; i < good_matches.size(); i++ ) { printf( "-- Good Match [%d] Keypoint 1: %d -- Keypoint 2: %d \n", i, good_matches[i].queryIdx, good_matches[i].trainIdx ); } waitKey(0); return 0; } все равно жалуется что не загруженны изображения, но почему они не загружены, я же чисто имена прописал и кинул их в корень проекта. я еще пробовал вместе imread писать cvLoadImage, так мне показывается что изображения считанны, но потом все равно вылетает ошибка
  15. спасибо огромное, конечно все равно ничего не работает) но теперь хотя бы ошибки не выдает и разобрался с библиотеками, что и как. теперь помогите решить последнюю проблему, просто по рабочей проге легче разобраться как работает каждая функция. Вот код, что тут не так. #include "stdafx.h" #include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #include "opencv2/core/gpumat.hpp" #include "opencv2/core/opengl_interop.hpp" #include "opencv2/ml/ml.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/contrib/contrib.hpp" #include "opencv2/video/tracking.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/nonfree/nonfree.hpp" using namespace cv; void readme(); /** @function main */ int main( int argc, char** argv ) { if( argc != 3 ) { readme(); return -1; } Mat img_1 = imread( "image1.jpg", CV_LOAD_IMAGE_GRAYSCALE ); Mat img_2 = imread( "image2.jpg", CV_LOAD_IMAGE_GRAYSCALE ); if( !img_1.data || !img_2.data ) { std::cout<< " --(!) Error reading images " << std::endl; return -1; } //-- Step 1: Detect the keypoints using SURF Detector int minHessian = 400; SurfFeatureDetector detector( minHessian ); std::vector<KeyPoint> keypoints_1, keypoints_2; detector.detect( img_1, keypoints_1 ); detector.detect( img_2, keypoints_2 ); //-- Step 2: Calculate descriptors (feature vectors) SurfDescriptorExtractor extractor; Mat descriptors_1, descriptors_2; extractor.compute( img_1, keypoints_1, descriptors_1 ); extractor.compute( img_2, keypoints_2, descriptors_2 ); //-- Step 3: Matching descriptor vectors using FLANN matcher FlannBasedMatcher matcher; std::vector< DMatch > matches; matcher.match( descriptors_1, descriptors_2, matches ); double max_dist = 0; double min_dist = 100; //-- Quick calculation of max and min distances between keypoints for( int i = 0; i < descriptors_1.rows; i++ ) { double dist = matches[i].distance; if( dist < min_dist ) min_dist = dist; if( dist > max_dist ) max_dist = dist; } printf("-- Max dist : %f \n", max_dist ); printf("-- Min dist : %f \n", min_dist ); //-- Draw only "good" matches (i.e. whose distance is less than 2*min_dist ) //-- PS.- radiusMatch can also be used here. std::vector< DMatch > good_matches; for( int i = 0; i < descriptors_1.rows; i++ ) { if( matches[i].distance < 2*min_dist ) { good_matches.push_back( matches[i]); } } //-- Draw only "good" matches Mat img_matches; drawMatches( img_1, keypoints_1, img_2, keypoints_2, good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector<char>(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS ); //-- Show detected matches imshow( "Good Matches", img_matches ); for( int i = 0; i < good_matches.size(); i++ ) { printf( "-- Good Match [%d] Keypoint 1: %d -- Keypoint 2: %d \n", i, good_matches[i].queryIdx, good_matches[i].trainIdx ); } waitKey(0); return 0; } /** @function readme */ void readme() { std::cout << " Usage: ./SURF_FlannMatcher <img1> <img2>" << std::endl; } вот что должно получится (1 изображение) я использую вот эти изображения (2,3 изображение) и что мне выдает прога (4 изображение) что не так тут, я не пойму)
×