از ellipse برای کشیدنش استفاده کنید.
#include <cv.h>
#include <highgui.h>
using namespace cv;
class BhCir{
public:
BhCir(int thickness, Point center, int size, int len,Scalar color,int step,int start_pos):
thickness_(thickness), center_(center), size_(size), len_(len),color_(color),step_(step),cur_pos_(start_pos),step_counter_(0){}
int thickness_;
int size_;
int len_;
Scalar color_;
int step_;
int step_counter_;
int cur_pos_;
Point center_;
void draw(Mat &img){
cv::ellipse(img,center_,Size(size_,size_),0,cur_pos_,cur_pos_+len_,color_,thickness_);
}
void nextStep(){
step_counter_ ++;
if (step_counter_ == step_)
{
cur_pos_ +=5;
if (cur_pos_ > 360)
cur_pos_ = cur_pos_ % 360;
step_counter_ = 0;
}
}
};
int main(int argc, char** argv)
{
Size size(500,500);
Mat img(size,CV_8UC3,Scalar::all(255));
Point center(size.width/2,size.height/2);
vector<BhCir> cirs;
for (int cir_size = 200;cir_size >0 ;cir_size -=50)
{
cirs.push_back(BhCir(20,center,cir_size,270,Scalar(0,255,0),(rand())%10 + 5,rand()%360));
}
int key;
do{
img.setTo(Scalar::all(255));
for (int i=0; i < cirs.size();i++)
{
cirs[i].nextStep();
cirs[i].draw(img);
}
imshow("view",img);
key = waitKey(1);
}while(key !=27);
imshow("view",img);
waitKey(0);
return 0;
}