加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

OpenCV在两点间画箭头的技巧

发布时间:2021-12-14 21:49:50 所属栏目:教程 来源:互联网
导读:在OpenCV中没有可以直接画箭头的方法,但是可以利用cvline方法来解决画箭头的问题。画箭头非常常用,在图像中标定运动方向中经常用到,如光流法等。 以下是解决方案。 double alpha_angle;//弧度 CvScalar line_color; line_color = CV_RGB(0,0,255); cv::Poi
在OpenCV中没有可以直接画箭头的方法,但是可以利用cvline方法来解决画箭头的问题。画箭头非常常用,在图像中标定运动方向中经常用到,如光流法等。
 
以下是解决方案。
 
       double alpha_angle;//弧度   
       CvScalar line_color;  
line_color = CV_RGB(0,0,255);  
  
cv::Point  pt1 = cvPoint(5,5);//起点   
cv::Point  pt2 = cvPoint(5,36); //终点   
cvLine(src,pt1,pt2,CV_RGB(0,0,255),1,8,0);//起点和终点间画直线   
  
  
float xx=pt2.x-pt1.x;  
float yy=pt2.y-pt1.y;  
  
 if(xx<ZERO && xx>-ZERO)//ZERO是坐标的原点   
          alpha_angle = pi/2;  
        else  
          alpha_angle = abs(atan(yy/xx));  
    //调整角度   
    if(xx<0 && yy>0) alpha_angle = pi - alpha_angle ;  
    if(xx<0 && yy<0) alpha_angle = pi + alpha_angle ;  
    if(xx>0 && yy<0) alpha_angle = 2*pi - alpha_angle ;  
  
   
    CvPoint p;//pt2是箭头的尖角顶点,而p是箭头两边的点。箭头是由p-pt2和pt2-p的两条线段(p赋了两次不同的值,前后不是一个点),以及pt1-pt2构成的。总共是三条线段。   
    p.x = (int) (pt2.x + 6 * cos(alpha_angle - pi / 4*3));  
    p.y = (int) (pt2.y + 6 * sin(alpha_angle - pi / 4*3));  
    cvLine( src, p, pt2, line_color, 1, CV_AA, 0 );//p-pt2线段1   
    p.x = (int) (pt2.x + 6 * cos(alpha_angle + pi / 4*3));  
    p.y = (int) (pt2.y + 6 * sin(alpha_angle + pi / 4*3));  
    cvLine( src, p, pt2, line_color, 1, CV_AA, 0 );//p-pt2线段2  

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读