【opencv】图形的绘制

原创
2014/10/08 21:50
阅读数 4.1K

1.矩形图像的绘制:

原函数:void cvRectangle(CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int line_type=8,int shift=0)

    img就是需要绘制的图像

    pt1 and pt2表示矩形的对角线上的两个点

    color表示绘制线条的颜色

    thickness表示线条的粗细程度,负数表示将其填充

    line_type表示线条类型

    shift表示做标点的小数点位数

例如:

//Rectangle
int main(){
    IplImage* img_temp = cvCreateImage(cvSize(500,500),IPL_DEPTH_8U,3);
    //绘制三个矩形
    cvRectangle(img_temp,cvPoint(10,10),cvPoint(300,300),CV_RGB(255,255,255),8,8,1);
    cvRectangle(img_temp,cvPoint(350,350),cvPoint(500,500),CV_RGB(111,111,111),-1,3,1);//填充
    cvRectangle(img_temp,cvPoint(550,550),cvPoint(620,620),CV_RGB(100,20,95),1,1,1);   
    cvNamedWindow("Rectangle",1);    cvShowImage("Rectangle",img_temp);    cvWaitKey(0);     
    cvReleaseImage(&img_temp);     
    cvDestroyWindow("Rectangle"); }

结果:

2.圆形图像的绘制:

原函数:void cvCircle(CvArr* img, CvPoint center,int radius,CvScalar color,int thickness=1 ,int line_type=8,int shift=0);

    center为圆心坐标

    radius为半径

    其他参数参照矩形函数

例子:

void circle(){
    IplImage* img = cvCreateImage(cvSize(500,500),IPL_DEPTH_8U,3);
    cvCircle(img,cvPoint(250,250),200,CV_RGB(100,20,95),1,8,1);
    cvCircle(img,cvPoint(250,250),100,CV_RGB(100,20,95),-1,8,1);//填充
    cvCircle(img,cvPoint(250,250),50,CV_RGB(100,111,111),-1,8,1);
    cvNamedWindow("Circle",1);
    cvShowImage("Circle",img);
}
结果:

3.直线的绘制:

原函数:void cvLine(CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1,int line_type=8, int shift=0);

    pt1 and pt2 表示线的两端

    其他参数见上面的说明

例子:

void line(){
    IplImage* img = cvCreateImage(cvSize(500,500),IPL_DEPTH_8U,3);
    cvLine(img,cvPoint(100,250),cvPoint(400,250),CV_RGB(111,12,200),1,8,1);
    cvLine(img,cvPoint(250,100),cvPoint(250,400),CV_RGB(111,12,200),2,8,1);
    cvLine(img,cvPoint(100,100),cvPoint(400,400),CV_RGB(111,12,200),3,8,1);
    cvLine(img,cvPoint(400,100),cvPoint(100,400),CV_RGB(111,12,200),4,8,1);
    cvNamedWindow("Line",1);
    cvShowImage("Line",img);
}
结果:

4.多边形的绘制:

原函数:void cvPolyLine(CvArr* img, CvPoint** pts, int* npts, int contours, int is_closed, CvScalar color, int thickness=1, int line_typw=8, int shift=0);

    pts 表示折线的顶点指针数组。

    npts表示折线的定点个数数组。也可以认为是pts指针数组的大小

    contours表示折线的线段数量。

    is_closed 图形是否封闭

    其他参数参照上面

例子:

void poly(){
    IplImage* img = cvCreateImage(cvSize(500,500),IPL_DEPTH_8U,3);
    CvPoint curve_1[] = {10,10, 30,730, 750,730, 730,10, 400,400};
    CvPoint curve_2[] = {20,20, 20,100, 200,100};
    CvPoint* curveArr[2] = {curve_1,curve_2};
    int nCurvePts[2] = {5,3};
    int nCurves = 2;//两个图形
    int isCurveClosed = 1;
//两个封闭的多边形
    cvPolyLine(img,curveArr,nCurvePts,nCurves,isCurveClosed,CV_RGB(100,0,200),1,8,1);
    cvNamedWindow("poly",1);
    cvShowImage("poly",img);
}
结果:

5.图像文本的输入:

原函数:void cvInitFont(CvFont* font, int font_face,double hscale, double vscale,double shear=0,int thickness=1,int line_type=8);

  font字体结构体

  font_face表示字体名称ID

    hscale表示字体宽度

    vscale表示字体高度。

    shear表示字体的斜度。当值为0时 ,字符不倾斜;当值为1.0f时,字体倾斜大约45度

    字体识别码:

       CV_FONT_HERSHEY_SIMPLEX - 正常大小无衬线字体。

        CV_FONT_HERSHEY_PLAIN - 小号无衬线字体。

        CV_FONT_HERSHEY_DUPLEX - 正常大小无衬线字体。

        CV_FONT_HERSHEY_COMPLEX - 正常大小有衬线字体。

        CV_FONT_HERSHEY_TRIPLEX - 正常大小有衬线字体 

        CV_FONT_HERSHEY_COMPLEX_SMALL - CV_FONT_HERSHEY_COMPLEX 的小译本。

        CV_FONT_HERSHEY_SCRIPT_SIMPLEX - 手写风格字体

例子:

void put_text(){
    IplImage* img = cvCreateImage(cvSize(500,500),IPL_DEPTH_8U,3);
    CvFont font;
    cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX|CV_FONT_ITALIC,1.0,1.0,0,1,8);
    cvPutText(img,"Test Test",cvPoint(100,100),&font,CV_RGB(100,111,200));
    cvNamedWindow("put_text",1);
    cvShowImage("put_text",img);
}
结果:


That's all!!

下面就是视频方面的部分了,继续继续!!!!

展开阅读全文
打赏
1
19 收藏
分享
加载中
6
2015/02/03 13:49
回复
举报
更多评论
打赏
1 评论
19 收藏
1
分享
在线直播报名
返回顶部
顶部