Missaya的博客

众里寻他千百度

OpenCv(5)--绘制形状与文字

1、画线
line()
void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 );
第一个参数img:要划的线所在的图像;
第二个参数pt1:直线起点
第二个参数pt2:直线终点
第三个参数color:直线的颜色 e.g:Scalor(0,0,255)
第四个参数thickness=1:线条粗细
第五个参数线条类型。CV_AA - antialiased 线条。
第六个参数:坐标点的小数点位数。
例:

Point p1 = Point(20,30);
point p2;
p2.x = 300;
p2.y = 300;
Scalar color = Scalar(0,255,255);
line(bgImage,p1,p2,color,1,Line_AA);//Line_AA为反锯齿

2、画椭圆
ellipse()
void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,
int thickness=1, int line_type=8, int shift=0 );
(1)img图像。
(2)center圆心坐标。
(3)radius 圆形的半径。
(4)color线条的颜色。
(5)thickness如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充。
(6)line_type线条的类型。见 cvLine 的描述
(7)shift圆心坐标点和半径值的小数点位数。

Scalar color = Scalar(0,255,255);
ellipse(bgImage,Point(bgImage.cols/2,bgImage.rows/2),Size(bgImage.cols/4,bgImage.rows/8),90,0,360,color,2,Line_8);

3、画矩形
rectangle()
通过传入矩形画矩形:
void rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0 )

Rect rect = Rect(200,100,300,300);
Scalar color = Scalar(255,0,0);
rectangle(bgImage,rect,color,2,Line_8);

4、画圆
circle()
cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int lineType=8, int shift=0)

Scalar color = Scalar(0255255);
circle(bgImage,Point(bgImage.rpws/2,bgImage.cols/2),150,color,1,Line_AA);

5、画填充
fillPoly()

#include <iostream>    
#include <opencv2/opencv.hpp>  

using namespace cv;  
using namespace std;  


int main()  
{  
    Mat src = imread("02.jpg");  

    Point root_points[1][6];  
    root_points[0][0] = Point(215, 220);  
    root_points[0][1] = Point(460, 225);  
    root_points[0][2] = Point(466, 450);  
    root_points[0][3] = Point(235, 465);  
    root_points[0][4] = Point(260, 390);  
    root_points[0][5] = Point(96, 310);  

    const Point* ppt[1] = { root_points[0] };  
    int npt[] = { 6 };  
    polylines(src, ppt, npt, 1, 1, Scalar(0,0,0), 1, 8, 0);  
    imshow("Test", src);  

    cv::Mat mask_ann, dst;  
    src.copyTo(mask_ann);  
    mask_ann.setTo(cv::Scalar::all(0));  

    fillPoly(mask_ann, ppt, npt, 1, Scalar(255, 255, 255));  
    imshow("mask_ann", mask_ann);  
    src.copyTo(dst, mask_ann);  
    imshow("dst", dst);  
    waitKey();  
    return 0;  
}  

6、绘制文字
void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false )

img – 显示文字所在图像.
text – 待显示的文字.
org – 文字在图像中的左下角 坐标.
font – 字体结构体.
fontFace – 字体类型, 可选择字体:
fontScale – 字体大小,该值和字体内置大小相乘得到字体大小
color – 文本颜色
thickness –  写字的线的粗细
lineType – 线型.
bottomLeftOrigin – true, 图像数据原点在左下角. Otherwise, 图像数据原点在左上角.
    Mat image2;  
    for(int i = 0;i < 255;i += 2)  
    {  
        image2 = image - Scalar::all(i);  
        putText(image2,"OpenCV Forever!",org,FONT_HERSHEY_COMPLEX,  
        3,Scalar(i,i,255),5,lineType);  
    }
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Missayaaa/article/details/79949638
个人分类: OpenCv
上一篇OpenCv(4)--图像混合
下一篇OpenCv(6)--直方图均衡化
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭