歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenCV在兩點間畫箭頭的方法

OpenCV在兩點間畫箭頭的方法

日期:2017/3/1 10:12:17   编辑:Linux編程

在OpenCV中沒有可以直接畫箭頭的方法,但是可以利用cvline方法來解決畫箭頭的問題。畫箭頭非常常用,在圖像中標定運動方向中經常用到,如光流法等。

以下是解決方案。

  1. double alpha_angle;//弧度
  2. CvScalar line_color;
  3. line_color = CV_RGB(0,0,255);
  4. cv::Point pt1 = cvPoint(5,5);//起點
  5. cv::Point pt2 = cvPoint(5,36); //終點
  6. cvLine(src,pt1,pt2,CV_RGB(0,0,255),1,8,0);//起點和終點間畫直線
  7. float xx=pt2.x-pt1.x;
  8. float yy=pt2.y-pt1.y;
  9. if(xx<ZERO && xx>-ZERO)//ZERO是坐標的原點
  10. alpha_angle = pi/2;
  11. else
  12. alpha_angle = abs(atan(yy/xx));
  13. //調整角度
  14. if(xx<0 && yy>0) alpha_angle = pi - alpha_angle ;
  15. if(xx<0 && yy<0) alpha_angle = pi + alpha_angle ;
  16. if(xx>0 && yy<0) alpha_angle = 2*pi - alpha_angle ;
  17. CvPoint p;//pt2是箭頭的尖角頂點,而p是箭頭兩邊的點。箭頭是由p-pt2和pt2-p的兩條線段(p賦了兩次不同的值,前後不是一個點),以及pt1-pt2構成的。總共是三條線段。
  18. p.x = (int) (pt2.x + 6 * cos(alpha_angle - pi / 4*3));
  19. p.y = (int) (pt2.y + 6 * sin(alpha_angle - pi / 4*3));
  20. cvLine( src, p, pt2, line_color, 1, CV_AA, 0 );//p-pt2線段1
  21. p.x = (int) (pt2.x + 6 * cos(alpha_angle + pi / 4*3));
  22. p.y = (int) (pt2.y + 6 * sin(alpha_angle + pi / 4*3));
  23. cvLine( src, p, pt2, line_color, 1, CV_AA, 0 );//p-pt2線段2
Copyright © Linux教程網 All Rights Reserved