Smorodov 579 Жалоба Опубликовано May 7, 2009 Программа определения оптического потока методом Лукаса-Кенейда. Архив с проектом тут: OpticalFlowLK.rar Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано February 19, 2010 Микро-игра на основе оптического потока и (или) шаблонов движения: http://paratrooper.cup-of-net.ru/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
gonzik 0 Жалоба Опубликовано March 17, 2010 Ни у кого нет данного примера под VS2008 ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано March 17, 2010 А что же там сложного для переделки? Убирай всё, что касается Билдера (это будет интерфейс) и заменяй на стандартный OpenCV вывод. Вообще, в примерах OpenCV есть отличный пример Лукаса-Канаде. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KOROVIN 0 Жалоба Опубликовано April 12, 2012 Уважаемые форумчане! Добрый день. подскажите где ошибка, хочу воспользоваться функцией cvCalcOpticalFlowFarneback. Но код выдает ошибку! Пожалуйста помогите! #include "StdAfx.h" #include "cv.h" #include "highgui.h" CvCapture* g_capture = NULL; int main(int argc, char** argv) { cvNamedWindow("Example", CV_WINDOW_AUTOSIZE ); g_capture=cvCreateFileCapture("E:\\Станислав\\T_CAMERA.avi"); bool first=true; IplImage* frame; IplImage* frame1=0; int i=0; IplImage* prevgray; IplImage* gray; CvMat flow; IplImage* cflow; while(1) { frame = cvQueryFrame( g_capture ); if( !frame ) break; cvShowImage( "Example", frame ); /*стандартная часть*/ if (first) { CvSize c = cvGetSize(frame); frame1=cvCreateImage(c,8,3); gray = cvCreateImage(c,8,1); prevgray = cvCreateImage(c,8,1); flow = cvMat(c.height, c.width, CV_32FC2, NULL ); } cvResize(frame,frame1,0); cvCvtColor(frame1,gray,CV_BGR2GRAY); if (!first) { cvCalcOpticalFlowFarneback(prevgray,gray,&flow,0.5, 3, 15, 3, 5, 1.2,0); //вот здесь выдается ошибка на второй итерации !! cvCvtColor(prevgray,cflow, CV_GRAY2BGR); // cvShowImage("flow",cflow); } /*конец блока*/ char c = cvWaitKey(0); if( c == 27 ) break; first=false; i++; cvCopy(gray,prevgray,NULL); } return 0; } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 16, 2012 потому что вы переводите в cvCvtColor посмотрите в отладчике под дебагом кол-во каналов изображения(или размер) у prevgray и cflow, скорее всего на второй итерации что то портится. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KOROVIN 0 Жалоба Опубликовано April 16, 2012 потому что вы переводите в cvCvtColor посмотрите в отладчике под дебагом кол-во каналов изображения(или размер) у prevgray и cflow, скорее всего на второй итерации что то портится. Проверял эти параметры кучу раз, там ничего не портится, мне кажется вся проблема в cvMat которую я не правильно задаю. где бы мне посмотреть пример кода, как использовать эту функцию (для расчета оптического потока) ? p.s В CvMat мне кажется я неправильно задаю кол-во строк и столбцов, как то по другому надо... p.p.s код брал из книги "распознавание объектов" Кручинина Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 16, 2012 так CvMat у вас только flow ну на всякий случай можно и проверить закоментировав. if (!first) { cvCalcOpticalFlowFarneback(prevgray,gray,&flow,0.5, 3, 15, 3, 5, 1.2,0); //cvCvtColor(prevgray,cflow, CV_GRAY2BGR); } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KOROVIN 0 Жалоба Опубликовано April 20, 2012 так CvMat у вас только flow ну на всякий случай можно и проверить закоментировав. То что вы предлагаете закомментировать вообще никогда не выполняется в данном листинге. давайте я попробую объяснить в самом начале я получаю кадр и спрашиваю "а первый ли это кадр?" Если да, то я снимаю размер и создаю все остальные изображения с размером моего фрейма НО применить метод cvCalcOpticalFlowFarneback Я не могу потому что мне надо хотя бы два изображения в оттенках серого - текущее и предыдущее поэтому я не захожу в цикл if (!first) {} после САМОГО ПЕРВОГО ПРОХОДА Я естесственно обнуляю first=false; и сохраняю "предыдущий кадр" cvCopy(gray,prevgray,NULL); все ! первый проход сделан, начинаем второй проход cvCvtColor(frame1,gray,CV_BGR2GRAY); - этой строчкой я сохраняю текущий кадр в оттенках серого и так как это уже не первый проход - захожу в функцию cvCalcOpticalFlowFarneback(prevgray,gray,&flow,0.5, 3, 15, 3, 5, 1.2,0); на что у меня выдается ошибка , скорее всего потому что flow у меня это flow = cvMat(c.height, c.width, CV_32FC2, NULL ); но значения ее ячейкам не заданы ! надо наверное им всем присвоить нули, но я не знаю как.... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 20, 2012 https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/fback_c.c?rev=2272 вот тут пример, все переменные CvMat попробуйте. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах