opencv各种绘图 直线 矩形 圆 椭圆

画图函数

(1)直线cvLine函数

其结构

void cvLine(//画直线
  CvArr* array,//画布图像
  CvPoint pt1,//起始点
  CvPoint pt2,//终点
  CvScalar color,//颜色
  int thickness = 1,//宽度
  int connectivity = 8//反走样
);

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main(int argc, char** argv)
{
  IplImage *src1;
  src1 = cvLoadImage("10.jpg");

  cvLine(src1,cvPoint(20,20),cvPoint(250,250),CV_RGB(255,0,0),8);

  cvShowImage( "原图", src1);
  cvWaitKey();
  return 0;
}

输出结果

(2)矩形cvRectangle函数

其结构

void cvRectangle(//画矩形
  CvArr* array,//画布图形
  CvPoint pt1,//起始点
  CvPoint pt2,//终点
  CvScalar color,//颜色
  int thickness = 1,//宽度
);

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main(int argc, char** argv)
{
  IplImage *src1;
  src1 = cvLoadImage("10.jpg");

  cvRectangle(src1,cvPoint(20,20),cvPoint(200,200),CV_RGB(0,255,0),8);

  cvShowImage( "原图", src1);
  cvWaitKey();
  return 0;
}

输出结果

(3)圆形cvCircle函数

其结构

void cvCircle(//画圆
  CvArr* array,//画布图像
  CvPoint cevter,//圆心
  int radius,//半径
  CvScalar color,//颜色
  int thickness = 1,//宽度
  int connectivity = 8//反走样
);

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main(int argc, char** argv)
{
  IplImage *src1;
  src1 = cvLoadImage("10.jpg");

  cvCircle(src1,cvPoint(150,150),100,CV_RGB(0,0,255),5);

  cvShowImage( "原图", src1);
  cvWaitKey();
  return 0;
}

输出结果

(4)椭圆cvEllipse函数

其结构

void cvEllipse(//画椭圆
  CvArr* img,//画布图像
  CvPoint center,//中心点
  CvSize axes,//长短轴
  double angle,//偏离主轴角度
  double start_angle,//弧线開始位置
  double end_angle,//弧线结束位置
  CvScalar color,//颜色
  int thickness = 1,//宽度
  int line_type = 8//
);

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main(int argc, char** argv)
{
  IplImage *src1;
  src1 = cvLoadImage("10.jpg");

  cvEllipse(src1,cvPoint(150,150),cvSize(150,50),45,0,360,CV_RGB(255,0,0),3);

  cvShowImage( "原图", src1);
  cvWaitKey();
  return 0;
}

输出结果

(5)多边形函数

1.cvFillPoly函数

其结构

void cvFillPoly(//画多个实心多边形
  CvArr* img,//画布图像
  CvPoint** pts,//点序列
  int* npt,//计数点数组
  int contours,//显示几个多边形
  CvScalar color,//颜色
  int line_type = 8
);

2.cvFillConvexPoly函数

其结构

void cvFillConvexPoly(//画一个实心多边形
  CvArr* img,//画布图像
  CvPoint* pts,//点序列
  int npt,//计数点数组
  CvScalar color,//颜色
  int line_type = 8
);

3.cvPolyLine函数

void cvFillPoly(//画多个空心多边形
  CvArr* img,//画布图像
  CvPoint** pts,//点序列
  int* npt,//计数点数组
  int contours,//显示几个多边形
  int is_closed,//是否从上个多边形尾点開始
  CvScalar color,//颜色
  int thickness = 1,//宽度
  int line_type = 8
);

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main(int argc, char** argv)
{
  IplImage *src1,*src2,*src3;
  src1 = cvLoadImage("7.jpg");
  src2 = cvLoadImage("8.jpg");
  src3 = cvLoadImage("9.jpg");

  int arr[3]= {4,4,4};   

  CvPoint ** pt =new CvPoint*[3];

  pt[0] = new CvPoint[4];
  pt[0][0] = cvPoint(10,10);
  pt[0][1] = cvPoint(210,10);
  pt[0][2] = cvPoint(210,210);
  pt[0][3] = cvPoint(10,210);
  pt[1] = new CvPoint[4];
  pt[1][0] = cvPoint(10,310);
  pt[1][1] = cvPoint(210,310);
  pt[1][2] = cvPoint(210,510);
  pt[1][3] = cvPoint(10,510);
  pt[2] = new CvPoint[4];
  pt[2][0] = cvPoint(310,10);
  pt[2][1] = cvPoint(410,10);
  pt[2][2] = cvPoint(410,210);
  pt[2][3] = cvPoint(310,210);  

  cvPolyLine(src1, pt, arr, 3, 1, CV_RGB(0,255,0),5);  

  cvFillPoly(src2, pt,arr,3,CV_RGB(250,0,0));  

  cvFillConvexPoly(src3,pt[0],4,CV_RGB(0,0,255));

  cvShowImage( "原图1", src1);
  cvShowImage( "原图2", src2);
  cvShowImage( "原图3", src3);
  cvWaitKey();
  return 0;
}

输出结果

(6)绘制文字cvPutText函数

其结构

void cvPutText(//绘制文字
  CvArr* img,//画图图像
  const char* text,//文字内容
  CvPoint origin,//文字起始位置
  const CvFont* font,//文字字体设置
  CvScalar color//颜色
);

实例代码

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main(int argc, char** argv)
{
  IplImage *src1,*src2,*src3;
  src1 = cvLoadImage("10.jpg");

  char* str = "I am a student!";

  CvFont* cf = new CvFont();

  cvInitFont(cf,CV_FONT_HERSHEY_SIMPLEX,1.0,0.5);

  cvPutText(src1,str,cvPoint(50,100),cf,CV_RGB(255,0,0));

  cvShowImage( "原图1", src1);
  cvWaitKey();
  return 0;
}

输出结果

to be continued

时间: 2024-08-27 01:45:37

opencv各种绘图 直线 矩形 圆 椭圆的相关文章

MFC 直线 虚线 折线 圆 椭圆 矩形 弧形

****Dlg.h头文件添加: //为工程添加画笔.点变量数组 public: CPen m_pen[5]; CPoint m_point[5]; public: void DrawLine(CDC *pDC); void DrawPolyline(CDC *pDC); void DrawPolygon(CDC *pDC); void DrawRect(CDC *pDC); void DrawRoundRect(CDC *pDC); void DrawEllipse(CDC *pDC); voi

《zw版&#183;Halcon-delphi系列原创教程》 Halcon分类函数005&#183;graphics-obj,基本绘图单元,包括线段、矩形、椭圆、圆形

<zw版·Halcon-delphi系列原创教程> Halcon分类函数005·graphics-obj,基本绘图单元,包括线段.矩形.椭圆.圆形 graphics-obj,基本绘图单元,包括线段.矩形.椭圆.圆形 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“procedure” :: 用大写字母“X”,替换:“IHUntypedObjectX” :: 省略了字符:“const”.“OleVariant” [示例] 说明 函数: procedure

Opencv图像识别从零到精通(22)-----hough变换检测直线与圆

今天要看的是霍夫变换,常用用来检测直线和圆,这里是把常见的笛卡尔坐标系转换成极坐标下,进行累计峰值的极大值,确定.HoughLines,HoughLinesP,HoughCircles,三个函数,首先先看看原理,最后会用漂亮的matlab图,来回归一下,霍夫直线变换. 霍夫线变换: 众所周知, 一条直线在图像二维空间可由两个变量表示. 例如: 在 笛卡尔坐标系: 可由参数:  斜率和截距表示. 在 极坐标系: 可由参数:  极径和极角表示 对于霍夫变换, 我们将用 极坐标系 来表示直线. 因此,

Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)

在数字图像中,往往存在着一些特殊形状的几何图形,像检测马路边一条直线,检测人眼的圆形等等,有时我们需要把这些特定图形检测出来,hough变换就是这样一种检测的工具. Hough变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解,那么这个解就对应着要寻找的几何形状的参数(比如说直线,那么就会得到直线的斜率k与常熟b,圆就会得到圆心与半径等等). 关于hough变换,核心以及难点就是关于就是有原始空间到参数空间的变换上.以直线检测为例,假设有一条直线L,

OpenCV2学习笔记(八):使用霍夫变换检测直线和圆

在研究一幅图像时,常常会遇到一些平面或线性问题,直线在图像中频繁可见.这些富有意义的特征在物体识别等图像处理过程中扮演着重要的角色.本节主要记录一种经典的检测直线算法--霍夫变换(Hough Transform),用Hough变换检测图像中的直线和圆,开发平台为Qt5.3.2+OpenCV2.4.9. 一:Hough变换检测图像的直线 1.基础Hough变换 在霍夫变换中,直线用以下方程表示: 其中,参数表示一条直线到图像原点(左上角)的距离, 表示与直线垂直的角度.如下图所示,直线1的垂直线的

如何用几何画板构造直线与圆的交点

在学习数学几何时,经常会遇到圆与直线的关系问题.今天小编就来教大家如何用几何画板构造直线与圆的交点,从而能直观的表现出圆与直线的关系. 具体的操作步骤如下: 1.打开几何画板软件,执行“绘图”—“绘制新函数”命令,在弹出的对话框中依次单击“2”.“x”,做出函数解析式f(x)=2x,如下图所示,单击“确定”按钮,做出函数图像. 2.利用“圆工具”绘制一个圆,同时选中圆和直线,执行“构造”—“交点”命令,构造直线和圆的交点. 3.单击“文本工具”,将交点的标签设为A.B,如下图所示.拖动圆改变位置

简单几何(直线与圆的交点) ZOJ Collision 3728

题目传送门 题意:有两个一大一小的同心圆,圆心在原点,大圆外有一小圆,其圆心有一个速度(vx, vy),如果碰到了小圆会反弹,问该圆在大圆内运动的时间 分析:将圆外的小圆看成一个点,判断该直线与同心圆的交点,根据交点个数计算时间.用到了直线的定义,圆的定义,直线与圆交点的个数. /************************************************ * Author :Running_Time * Created Time :2015/10/24 星期六 16:14:

OpenCV 学习(直线拟合)

OpenCV 学习(直线拟合) Hough 变换可以提取图像中的直线.但是提取的直线的精度不高.而很多场合下,我们需要精确的估计直线的参数,这时就需要进行直线拟合. 直线拟合的方法很多,比如一元线性回归就是一种最简单的直线拟合方法.但是这种方法不适合用于提取图像中的直线.因为这种算法假设每个数据点的X 坐标是准确的,Y 坐标是带有高斯噪声的.可实际上,图像中的每个数据点的XY 坐标都是带有噪声的. 下面就来讲讲适用于提取图像中直线的直线拟合算法. 一个点 (xi,yi) 到直线的距离用 ri 来

数学图形(1.1) 圆,椭圆

圆 vertices = 360 w = from 0 to (2*PI) r = 10.0 x = r*sin(w) y = r*cos(w) 圆面,面上有纹理坐标,有顶点色 vertices = D1:360 D2:100 u = from 0 to (2*PI) D1 v = from 0 to 10 D2 x = sin(u) y = cos(u) r = (x+1)/2 g = (y+1)/2 b = v/10 x = v*x y = v*y 椭圆 vertices = 1000 r