文档章节

【opencv】图形的绘制

其实我是兔子
 其实我是兔子
发布于 2014/10/08 21:50
字数 755
阅读 965
收藏 19

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!!

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

© 著作权归作者所有

共有 人打赏支持
其实我是兔子
粉丝 6
博文 4
码字总数 8060
作品 0
浦东
程序员
私信 提问
加载中

评论(1)

SASUKE40
SASUKE40
6
OpenCV3 - OpenCV的绘图函数

代码 cv.line(), cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText() 如上所有的函数, 都使用如下相似的参数 img: 你想绘制图形的图片 color: 图形的颜色, 如果是RGB, 使用tuple, 例...

袁祾
2017/12/31
0
0
想学点图像处理方面的东西,大牛们有啥好建议没?

如题。。 嗯,主要是想学点简单的基础的吧。对这个不太了解,是不是学习的难度选择的语言有关系呢?因为我稍稍看了一下C++的代码好像挺复杂的。要是换其他语言呢,有没啥基础。上次还在OSC看...

就是我啊
2012/11/21
1K
12
Opencv-python接口:轮廓检测

相比C++而言,Python适合做原型。本系列的文章介绍如何在Python中用OpenCV图形库,以及与C++调用相应OpenCV函数的不同之处。这篇文章介绍在Python中使用OpenCV检测并绘制轮廓。 提示: 转载请...

u011534057
2017/09/04
0
0
[Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/83758402 该系列文章是讲解Python OpenCV图像处理知识,前...

Eastmount
2018/11/06
0
0
在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域

这是两个相关的程序,前者是后者的基础。实际上前一个程序也是在前面博文的基础上做的修改,请参考《在OpenCV中利用鼠标绘制直线》 。下面贴出代码。 程序之一,在OpenCV中利用鼠标绘制矩形 ...

moki_oschina
2015/01/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

/sbin/ldconfig.real: /usr/local/lib/libcudnn.so.7 不是符号链接

平台:Ubuntu 18 LTS 问题描述 /sbin/ldconfig.real: /usr/local/lib/libcudnn.so.7 不是符号链接 解决办法:建立软连接 sudo ln -sf /usr/local/lib/libcudnn.so.7.1.3 /usr/local/lib/libc......

Pulsar-V
10分钟前
0
0
C++多线程之使用Mutex和Critical_Section

Mutex和Critical Section都是主要用于限制多线程(Multithread)对全局或共享的变量、对象或内存空间的访问。下面是其主要的异同点(不同的地方用绿色表示)。 Mutex Critical Section 性能和...

shzwork
24分钟前
0
0
AWS的自动部署工具codedeploy 部署前的准备工作

开始部署codedeploy: 1.先预置IAM用户: 创建一个IAM用户或使用一个与AWS相关联的用户; 复制以下的策略附加到IAM用户,向IAM用户赋予对codedeploy(及codedeploy所依赖的AWS服务和操作)的...

守护-创造
36分钟前
1
0
这可能是最详细的一线大厂Mysql面试题详解了

1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 从:io线程——在使用start slave 之后...

Java干货分享
46分钟前
3
0
人的精力是什么?如何强化精力

人的精力是什么? 人的精力是什么? 精力指精神和体力。精神包括一个人的精神状态,兴奋度,做事情的投入度,专注度,持续时间等。 人的精力来源 人的精力有4种来源,身体的、情感的、思想的和...

莫库什勒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部