2013-02-20 3 views
1

OpenCV 2.4.4 버전을 사용하고 있습니다. - 나는 그 베타가 인 것을 알고있다.하지만 이라는 예제 폴더에있는 메서드는 cv::calcOpticalFlowSF이라는 예제가있다. 그러나이 데모를 복사하여 입력 이미지와 함께 사용하면 처리가 시작되고 몇 초 후에 충돌 보고서가 다시 나타납니다. 메서드에 대한 설명서는 약간 이상합니다. 출력 파일은 메서드에서 실제로 원하는 cv::Mat& flow 대신 x 및 yflow입니다. 아이디어를 통해 문제를 해결하고 기능을 작동 시키려면 어떻게해야합니까?cv :: calcOpticalFlowSF가 작동하는 방법?

+0

크래시 보고서의 실제 세부 정보를 게시해야합니다. 별도의 X 및 Y 플로우에 대한 비트는 C++ API가 아닌 C API 용입니다. – ajshort

답변

4

(here에서 디스플레이 도움을) 당신의 요구에 맞게 수정 한 후, 나를 위해 일한이 간단한 데모를보십시오 :

Mat frame1 = imread("/home/radford/Desktop/1.png"); 
Mat frame2 = imread("/home/radford/Desktop/2.png"); 

namedWindow("flow"); 
Mat flow; 

calcOpticalFlowSF(frame1, frame2, flow, 3, 2, 4); 

Mat xy[2]; 
split(flow, xy); 

//calculate angle and magnitude 
Mat magnitude, angle; 
cartToPolar(xy[0], xy[1], magnitude, angle, true); 

//translate magnitude to range [0;1] 
double mag_max; 
minMaxLoc(magnitude, 0, &mag_max); 
magnitude.convertTo(magnitude, -1, 1.0/mag_max); 

//build hsv image 
Mat _hsv[3], hsv; 
_hsv[0] = angle; 
_hsv[1] = Mat::ones(angle.size(), CV_32F); 
_hsv[2] = magnitude; 
merge(_hsv, 3, hsv); 

//convert to BGR and show 
Mat bgr;//CV_32FC3 matrix 
cvtColor(hsv, bgr, COLOR_HSV2BGR); 
imshow("flow", bgr); 
waitKey(0); 
+0

이제는 opticalFlow DualTVL1도 함께 사용해 주셔서 감사합니다. – user1651460

+0

고맙습니다. 코드가 많은 도움이되었습니다. 하지만 나는 회색 이미지에 문제가있다. \t'cv :: cvtColor (image1Re, gray, CV_BGR2GRAY); cv :: cvtColor (image2Re, prevgray, CV_BGR2GRAY);'프레임 1 및 프레임 2의 입력 인디케이터로 gray 및 prevgray를 사용합니다. 이 경우 무엇이 잘못 될지 아십니까? – user1651460

+0

calcOpticalFlowSF 문서의 변수 이름을 살펴 보았을 때 색상이 알고리즘에서 사용되는 것처럼 보이므로 입력으로 필요합니다. –

0

을 예에서 OpenCV의/샘플/CPP/코드 블록

이 simpleflow_demo.cpp
if (frame1.type() != 16 || frame2.type() != 16) { 
    printf(APP_NAME "Images should be of equal type CV_8UC3\n"); 
    exit(1); 
} 

따라서 회색 이미지는 CV_8UC3으로 변환되어야합니다. 예를 들어 cvtColor (gray, grey3, CV_GRAY2RGB);

관련 문제