OpenCV基础(五)---图形绘制

图形绘制

OpenCV提供了直线,矩形,圆,椭圆的绘制函数,下面介绍用法

直线绘制:line()

函数原型:

void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
              int thickness = 1, int lineType = LINE_8, int shift = 0);

参数声明:

  • InputOutputArray img:输出图像
  • Point pt1:线段的第一个点
  • Point pt2:线段的第二个点
  • const Scalar& color:直线颜色
  • int thickness = 1:直线粗细程度
  • int lineType = LINE_8:直线类型
  • int shift = 0:点坐标的小数点位数

代码:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3
 4 using namespace std;
 5 using namespace cv;
 6
 7 int main(int argc, char** argv) {
 8
 9     Mat srcImage = imread("D:/shenjianxin.png");
10     if (!srcImage.data) {
11         cout << "could not load image" << endl;
12         return -1;
13     }
14
15     Point p1 = Point(200, 300);
16     Point p2 = Point(400, 300);
17     Scalar color = Scalar(0, 0, 255);
18     line(srcImage, p1, p2, color, 2, 8, 0);
19     imshow("直线绘制", srcImage);
20
21     waitKey(0);
22     return 0;
23 }

效果图:

矩形绘制:rectangle()

函数原型:

void rectangle(CV_IN_OUT Mat& img, Rect rec,
               const Scalar& color, int thickness = 1,
               int lineType = LINE_8, int shift = 0);

函数声明:

  • CV_IN_OUT Mat& img:输出图像
  • Rect rec: 矩形的位置和长宽
  • const Scalar& color:矩形颜色
  • int thickness = 1:线宽
  • int lineType = LINE_8:直线类型
  • shit:点坐标的小数点位数

代码:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3
 4 using namespace std;
 5 using namespace cv;
 6
 7 int main(int argc, char** argv) {
 8
 9     Mat srcImage = imread("D:/shenjianxin.png");
10     if (!srcImage.data) {
11         cout << "could not load image" << endl;
12         return -1;
13     }
14
15     Rect rect = Rect(200, 100, 200, 200);
16     Scalar color = Scalar(255, 0, 0);
17     rectangle(srcImage, rect, color, 2, LINE_8);
18     imshow("矩形绘制", srcImage);
19
20     waitKey(0);
21     return 0;
22 }

效果图:

圆形绘制:circle()

函数原型:

void circle(InputOutputArray img, Point center, int radius,
                const Scalar& color, int thickness = 1,
                int lineType = LINE_8, int shift = 0);

函数声明:

  • img  图像
  • center 圆心
  • radius 半径
  • color 颜色
  • thickness 线宽
  • linetype 线型
  • shift 坐标点的小数点位数

代码:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3
 4 using namespace std;
 5 using namespace cv;
 6
 7 int main(int argc, char** argv) {
 8
 9     Mat srcImage = imread("D:/shenjianxin.png");
10     if (!srcImage.data) {
11         cout << "could not load image" << endl;
12         return -1;
13     }
14
15     Scalar color = Scalar(0, 0, 255);
16     Point center = Point(srcImage.cols / 2, srcImage.rows / 2);
17     circle(srcImage, center, 99, color, 2, 8);
18     imshow("圆形绘制", srcImage);
19
20     waitKey(0);
21     return 0;
22 }

效果图:

椭圆绘制:ellipse()

函数原型:

 void ellipse(InputOutputArray img, Point center, Size axes,
                        double angle, double startAngle, double endAngle,
                        const Scalar& color, int thickness = 1,
                        int lineType = LINE_8, int shift = 0);

函数声明:

  • img 图像
  • center 椭圆原心
  • axes  椭圆x轴长度的一半,y轴长度的一半
  • angle 椭圆旋转角度
  • startAngle 起始角度
  • endAngle 终止角度
  • color 椭圆颜色
  • thickness 线宽
  • linetype 线型
  • shift 坐标小数点位数

代码:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3
 4 using namespace std;
 5 using namespace cv;
 6
 7 int main(int argc, char** argv) {
 8
 9     Mat srcImage = imread("D:/shenjianxin.png");
10     if (!srcImage.data) {
11         cout << "could not load image" << endl;
12         return -1;
13     }
14
15     Scalar color = Scalar(0, 255, 0);
16     ellipse(srcImage, Point(srcImage.cols / 2, srcImage.rows / 2), Size(srcImage.cols / 4, srcImage.rows / 4), 0, 0, 360, color, 2, LINE_8);
17     imshow("椭圆绘制", srcImage);
18
19     waitKey(0);
20     return 0;
21 }

效果图:

原文地址:https://www.cnblogs.com/zmm1996/p/10664009.html

时间: 2024-08-06 11:10:10

OpenCV基础(五)---图形绘制的相关文章

OpenCV基础篇——图形图像旋转

以前在做图像处理的时候用到了图像的旋转,opencv自带的flip函数只能180度,因为需要旋转任意角度,顺时针和逆时针的情况,所以去找了些效果比较好的函数来实现.网上有的旋转函数有内存泄露的现象,现在把修改过我用过的无内存泄露的函数分享一下: 一: void cvRotate(IplImage* src,int angle) { IplImage * dst = 0; dst = cvCloneImage (src); double delte = 1.0; double factor = 1

【Windows编程】系列第五篇:GDI图形绘制

上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解.GDI可以绘制点.直线曲线.填充封闭区域.位图以及文本,其中文本部分已经在上一篇中将了,请参考[Windows编程]系列第三篇:文本字符输出. 跟前面的GDI对象一样,本篇的这些绘图函数也必须要设备上下文句柄(HDC)作为函数参数,从前文我

第68课 基础图形绘制(下)

1. 简易绘图程序 (1)功能需求 ①自由图形绘制 ②基本图形绘制(直线.矩形和椭圆) ③能够选择图形绘制颜色 (2)界面解决方案 ①以QWidget为基类创建绘图主窗口 ②使用QGroupBox创建图形设置区域 ③使用单选按钮QRadioBox实现目标图形的选择 ④使用组合框QCombox实现绘图颜色的选择 2. 自由绘图的实现 (1)自由绘图的本质是跟踪鼠标的移动轨迹:因此,必须考虑什么时候开始?什么时候结束?以及如何记录鼠标移动? (2)从绘图参数的角度,可以将己经绘制结束的图形与正在绘制

寒假学习(五)模拟图形绘制

模拟图形绘制 对于一个图形绘制程序,用下面的层次对各种实体进行抽象.定义一个 Drawable 的特质,其包括一个 draw 方法,默认实现为输出对象的字符串表示.定义一个 Point 类表示点,其混入了 Drawable 特质,并包含一个 shift 方法,于移动点.所有图形实体的抽象类为Shape,其构造函数包括一个 Point 类型,表示图形的具体位置(具体意义对不同的具体图形不一样).Shape 类有一个具体方法 moveTo 和一个抽象方法 zoom,其中 moveTo 将图形从当前位

什么是图像 -- opencv基础

opencv基础篇--到底什么是图像 什么是图像?英语中有两个单词来形容图像,一个是picture,一个是image.这两者虽然是形容同一个东西,但却又有着区别.picture代表实而有物的真实图像:而image代表着计算机中存储的图像,也代表想象中的图像. 而我们更多研究的便是image,计算机图像从广义地可分为矢量图和像素图(位图).矢量图,是由一系列计算机指令描述和记录的一幅图,一幅图可以解为一系列由点.线.面等组成的子图.像素图,则是由很多个点组成的,每个点都是由二进制数据来描述和存储其

OpenCV 基础知识------图像创建、访问、转换

cvCreateImage函数-- Cxcore数组操作 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ); size 图像宽.高. depth 图像元素的位深度,可以是下面的其中之一: IPL_DEPTH_8U - 无符号8位整型 IPL_DEPTH_8S - 有符号8位整型 IPL_DEPTH_16U - 无符号16位整型 IPL_DEPTH_16S - 有符号16位整型 IPL_DEPTH_32

PCB ODB++(Gerber)图形绘制实现方法

这里讲解一下用net解析PCB图形绘制实现方法 一.解析PCB图形绘制实现 解析PCB图形,说简单也非常简单,先说一下,PCB Gerber图形由:点,线,弧,铜皮,文字 5类元素组成,通常简写为:P,L,A,S,T五类,这几类元素的难易程度,刚好是按这个顺序排列的(个人实际应用这么认为的).即然是5类就得建立5种元素的数据结构存储它吧, PAD结构 /// <summary> /// PAD 数据类型 /// </summary> public struct gP { publi

Android中GPU硬件加速控制及其在2D图形绘制上的局限

图形的渲染可分为两种:软件渲染和硬件渲染.软件渲染是靠CPU计算各种坐标并绘制,主要是占用内存:硬件渲染是靠GPU,主要占用显存,一般的3D图形程序(OpenGL.DirectX)都是GPU加速的. 在Android3.0之前,2D绘图API只支持软件渲染模式,从Android3.0开始,2D绘图API开始支持GPU硬件渲染,即View中的Canvas的绘图操作会使用GPU,所以从Android 3.0(API Level 11)开始,View中就多了一些和硬件相关的方法.如果App的Andro

iOS的基本图形绘制

绘图的步骤: 1.获取上下文 2.创建路径(描述路径) 3.把路径添加到上下文 4.渲染上下文 通常在- (void)drawRect:(CGRect)rect这个方法里面绘制图形 为什么要再drawRect里面绘图,只有在这个方法里面才能获取到跟View的layer相关联的图形上下文 一.直线的绘制 1.最原始的方法绘制直线 2.第二种绘制直线的方法 3.第三种绘制直线的方法 二.绘制两条直线的方法及线条属性的设置 1.原始方法实现 2.Bezier方法的实现 三.曲线的绘制 四.绘制圆角矩形