OpenCV学习笔记:绘图指令(矩形、圆、线、文本标注)

环境:CentOS7
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
$ pkg-config --modversion opencv
2.4.13

效果图(前后对比):

    

代码:

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<cv.h>
#include<highgui.h>
#include<iostream>
using namespace std;

int main(int argc,char**argv)
{
    /********图像转换********/
    /*字节图像的灰度图-彩色转换*/
    IplImage *img1 = cvLoadImage("wongrgb.jpg");
    // 绘制矩形:在点 1和 2之间绘制一矩形,边线用红色、宽度
    cvRectangle(img1, cvPoint(10,10), cvPoint(70,70), cvScalar(0,255,0), 3);
    // 绘制圆形:圆心为、半径. 圆周颜色、宽度
    cvCircle(img1, cvPoint(100,100), 20, cvScalar(255,255,0), 2);
    // 绘制线段:在 (100,100) 和 (200,200) 之间、线宽为 1 的绿色线段
    cvLine(img1, cvPoint(100,100), cvPoint(200,200), cvScalar(0,0,255), 3);

    /*绘制一组线段:*/
    /*void cvPolyLine( CvArr* img, CvPoint** pts, int* npts, 
                        int contours, int is_closed,
                        CvScalar color, int thickness=1, 
                        int line_type=8, int shift=0 );
        img 图像。
        pts 折线的顶点指针数组。
        npts 折线的定点个数数组。也可以认为是pts指针数组的大小
        contours 折线的线段数量。
        is_closed 指出多边形是否封闭。如果封闭,函数将起始点和结束点连线。
        color 折线的颜色。
        thickness 线条的粗细程度。
        line_type 线段的类型。参见cvLine。
        shift 顶点的小数点位数*/
    CvPoint curve1[]={10,10, 10,100, 100,100, 100,10};
    CvPoint curve2[]={30,30, 30,130, 130,130, 130,30, 150,10};
    CvPoint* curveArr[2]={curve1, curve2};
    int nCurvePts[2]={4,5};
    int nCurves=2;
    int isCurveClosed=1;
    int lineWidth=2;
    cvPolyLine(img1,curveArr,nCurvePts,nCurves,
                    isCurveClosed,cvScalar(0,255,255),lineWidth);

    /*绘制一组填充颜色的多边形:*/
    /*cvFillPoly用于一个单独被多边形轮廓所限定的区域内进行填充。
                函数可以填充复杂的区域,例如,有漏洞的区域和有交叉点的区域等等。
    void cvFillPoly( CvArr* img, CvPoint** pts, int* npts, 
                    int contours,CvScalar color, int
                    line_type=8, int shift=0 );
            img 图像。
            pts 指向多边形的数组指针。
            npts 多边形的顶点个数的数组。
            contours 组成填充区域的线段的数量。
            color 多边形的颜色。
            line_type 组成多边形的线条的类型。
            shift 顶点坐标的小数点位数。*/
    cvFillPoly(img1,curveArr,nCurvePts,nCurves,cvScalar(0,255,255));

    /*文本标注:*/
    /*可用的字体类型有: 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_SCRIPT_SIMPLEX,
    CV_FONT_HERSHEY_SCRIPT_COMPLEX,*/
    CvFont font;
    double hScale=1.0;
    double vScale=1.0;
    lineWidth=2;
    cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX|CV_FONT_ITALIC, hScale,vScale,0,lineWidth);
    cvPutText (img1,"Comment",cvPoint(20,100), &font, cvScalar(8,0,0));

    cvShowImage("win1",img1);
    cvSaveImage("wongrgb1.jpg",img1);
    cvWaitKey(0);
    return 0;
}

编译与运行:

$ make
g++ main.cpp `pkg-config --cflags --libs opencv`
$ ./a.out 
代码参考:《OpenCV中文参考手册》

猜你喜欢

转载自blog.csdn.net/rong_toa/article/details/80194481