OpenCV Jak drukować wektory prędkości jako strzałki przy użyciu pojedynczego statycznego obrazu
Próbuję wykreślić wektory prędkości, jak w matlab, używamy funkcji „kołczan”http://www.mathworks.com/help/techdoc/ref/quiver.html
Muszę przenieść tę samą metodologię w C ++ przy użyciu biblioteki OpenCV.
Słyszałem, że istnieje kilka metod przepływu optycznego, tj. Lucas i Kanade (cvCalOpticalFlowLK) lub Horn i Schunck (cvCalOpticalFlowHS) lub metoda dopasowania bloku (cvCalOpticalFlowBM)
ale wszystkie te funkcje mają dwa obrazy, a ja muszę użyć jednego obrazu, ponieważ pracuję nad odciskami palców.
Proszę mi pomóc ...
Znaleziono [Edytuj] Rozwiązanie
<code>void cvQuiver(IplImage*Image,int x,int y,int u,int v,CvScalar Color, int Size,int Thickness){ cv::Point pt1,pt2; double Theta; double PI = 3.1416; if(u==0) Theta=PI/2; else Theta=atan2(double(v),(double)(u)); pt1.x=x; pt1.y=y; pt2.x=x+u; pt2.y=y+v; cv::line(Image,pt1,pt2,Color,Thickness,8); //Draw Line Size=(int)(Size*0.707); if(Theta==PI/2 && pt1.y > pt2.y) { pt1.x=(int)(Size*cos(Theta)-Size*sin(Theta)+pt2.x); pt1.y=(int)(Size*sin(Theta)+Size*cos(Theta)+pt2.y); cv::line(Image,pt1,pt2,Color,Thickness,8); //Draw Line pt1.x=(int)(Size*cos(Theta)+Size*sin(Theta)+pt2.x); pt1.y=(int)(Size*sin(Theta)-Size*cos(Theta)+pt2.y); cv::line(Image,pt1,pt2,Color,Thickness,8); //Draw Line } else{ pt1.x=(int)(-Size*cos(Theta)-Size*sin(Theta)+pt2.x); pt1.y=(int)(-Size*sin(Theta)+Size*cos(Theta)+pt2.y); cv::line(Image,pt1,pt2,Color,Thickness,8); //Draw Line pt1.x=(int)(-Size*cos(Theta)+Size*sin(Theta)+pt2.x); pt1.y=(int)(-Size*sin(Theta)-Size*cos(Theta)+pt2.y); cv::line(Image,pt1,pt2,Color,Thickness,8); //Draw Line } } </code>