Tôi cố gắng để vẽ vectơ vận tốc như trong MATLAB chúng tôi sử dụng "rung động" chức năng http://www.mathworks.com/help/techdoc/ref/quiver.htmlOpenCV Làm thế nào để Vẽ vectơ vận tốc như mũi tên trong việc sử dụng hình ảnh đơn tĩnh
Tôi cần phải cổng cùng phương pháp trong C++ sử dụng thư viện OpenCV.
Tôi đã nghe nói Có một vài phương pháp dòng chảy quang học, tức là Lucas và Kanade (cvCalOpticalFlowLK) hoặc Horn và Schunck (cvCalOpticalFlowHS) hoặc phương pháp Matching Block (cvCalOpticalFlowBM)
nhưng tất cả các chức năng này có hai hình ảnh, trong khi tôi cần phải sử dụng một hình ảnh bởi vì tôi đang làm việc trên dấu vân tay.
Vui lòng giúp tôi ...
[Chỉnh sửa] Giải pháp phát hiện
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
}
}
cảm ơn và hữu ích – wolvorinePk
@wolvorinePk Tôi rất vui vì nó đã giúp ai đó! – Dan
@Dan: Tôi có thể đề xuất bạn chỉnh sửa mã và có mã trong một hàm như "arrowedLine()" hay không. Trong đó có một cú pháp tương tự như cv :: line()? – mkuse