OpenCV画任意圆弧曲线

  

逆时针画圆弧,原理:将360度分割成36份,分别标出每10度角度时的坐标点,然后将每个点连接起来只

        # include & lt; iostream>   # include & lt; opencv2 \ \ core.hpp>核心;   # include & lt; opencv2 \ opencv.hpp>   # include & lt; opencv2 \ highgui \ highgui.hpp>   # include & lt; opencv2 \ contrib \ contrib.hpp>      # include & lt; fstream>   # include & lt; windows.h>      使用名称空间的简历;   使用名称空间性病;//图像,圆心,开始点,结束点,线宽   空白DrawArc(曾经繁荣ArcCenter垫* src,点,点,点端点,int填)   {   如果(填补& lt;=0)返回;      vector点;   双Angle1=量化((曾经繁荣。y - ArcCenter.y),(曾经繁荣。x - ArcCenter.x));   双Angle2=量化((端点。y - ArcCenter.y),(端点。x - ArcCenter.x));   二倍角=Angle1 - Angle2;   角=角* 180.0/CV_PI;      如果(角& lt;0)角=360 +角;   如果(角==0)角=360;   int边缘=地板(角/10);//向下取整      Dots.push_back(曾经繁荣);   for (int i=0;我& lt;边缘;我+ +)   {   双dSinRot=罪(- (10 * (i + 1) * CV_PI/180);   双dCosRot=cos (- (10 * (i + 1) * CV_PI/180);   int x=ArcCenter。x + dCosRot *(曾经繁荣。x - ArcCenter.x) - dSinRot *(曾经繁荣。y - ArcCenter.y);   int y=ArcCenter。y + dSinRot *(曾经繁荣。x - ArcCenter.x) + dCosRot *(曾经繁荣。y - ArcCenter.y);   点。push_back方法(点(x, y));   }   Dots.push_back(端点);   RNG, RNG=theRNG ();   标量颜色=标量(rng。制服(100,255),提高。制服(100,255),提高。制服(100,255));   for (int i=0;我& lt;Dots.size () - 1;我+ +){   线([我]* src,点,点(i + 1),颜色,填充);   }   Dots.clear ();   }      int main ()   {   垫Img=垫::0 (800、800、CV_8UC3);   int64蒂姆=getTickCount ();//坐标零400400点   点起点=点(400、400);//起始坐标150,-100   点曾经繁荣=点(起点。x + 150,起点。y - (-100));//结束坐标-150,-100   点端点=点(起点。x - 150,起点。y - (-100));//圆心相对起始点的坐标-150200   int I=曾经繁荣。x - 150;   int J=曾经繁荣。y - (+ 200);      点?点(I, J);//显示圆心坐标   圆(Img弧5、标量(0,0,255),1);//显示起始点坐标   圆(Img,曾经繁荣5标量(255,0,0),1);//显示结束点坐标   圆(Img端点5、标量(0 255 0),1);//图像,圆心,开始点,结束点,线宽   DrawArc(和Img,弧,曾经繁荣,端点,2);   imshow(“正多边形”,Img);      蒂姆=getTickCount()——蒂姆?;   printf("处理耗时:% fms \ n \ n”, tim * 1000/getTickFrequency ());   waitKey (0);   返回0;   }      

效果如下:
  

  

 OpenCV画任意圆弧曲线

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

OpenCV画任意圆弧曲线