OpenCV基础(五)

Stella981
• 阅读 686

图形绘制

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 }

效果图:

OpenCV基础(五)

矩形绘制: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 }

效果图:

OpenCV基础(五)

圆形绘制: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 }

效果图:

OpenCV基础(五)

椭圆绘制: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 }

效果图:

OpenCV基础(五)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
OpenCV 绘制图形
OpenCV绘制图形直线voidcv::line (InputOutputArray  img, //图像Point pt1,       //线的起点Point pt2,       //线的终点constScalar& color,  //线的颜色int
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这