目录

1. 概况

2. 原理

2.1 Point

2.2 Scalar

3. 代码

4.结果


1. 概况

  • 如何用 Point 在图像中定义 2D 点

  • 如何以及为何使用 Scalar

  • 用OpenCV的函数 line 绘 直线

  • 用OpenCV的函数 ellipse 绘 椭圆

  • 用OpenCV的函数 rectangle 绘 矩形

  • 用OpenCV的函数 circle 绘

  • 用OpenCV的函数 fillPoly 绘 填充的多边形

2. 原理

2.1 Point

次数据结构表示了由其图像坐标 指定的2D点。可定义为:

Point pt;
pt.x = 10;
pt.y = 8;
// 或者
Point pt =  Point(10, 8);

2.2 Scalar

  • 表示了具有4个元素的数组。次类型在OpenCV中被大量用于传递像素值。

  • 本节中,我们将进一步用它来表示RGB颜色值(三个参数)。如果用不到第四个参数,则无需定义

    看个例子,如果给出以下颜色参数表达式:

Scalar( a, b, c )
//那么定义的RGB颜色值为: and *Blue = a*  , *Green = b* ,*Red = c*

3. 代码

double w = 320;
int main(int argc, char** argv) {/// 窗口名字char atom_window[] = "Drawing 1: Atom";char rook_window[] = "Drawing 2: Rook";/// 创建空全黑像素的空图像Mat atom_image = Mat::zeros(w, w, CV_8UC3);Mat rook_image = Mat::zeros(w, w, CV_8UC3);/// 1. 画一个简单的原子。
​/// 1.a. 创建椭圆MyEllipse(atom_image, 90);MyEllipse(atom_image, 0);MyEllipse(atom_image, 45);MyEllipse(atom_image, -45);
​/// 1.b. 创建圆MyFilledCircle(atom_image, Point(w / 2.0, w / 2.0));
​/// 2. 画一个赌棍
​/// 2.a. 创建一个凸多边形MyPolygon(rook_image);
​/// 2.b. 创建矩形rectangle(rook_image,Point(0, 7 * w / 8.0),Point(w, w),Scalar(0, 255, 255),-1,8);
​/// 2.c. 画几条直线MyLine(rook_image, Point(0, 15 * w / 16), Point(w, 15 * w / 16));MyLine(rook_image, Point(w / 4, 7 * w / 8), Point(w / 4, w));MyLine(rook_image, Point(w / 2, 7 * w / 8), Point(w / 2, w));MyLine(rook_image, Point(3 * w / 4, 7 * w / 8), Point(3 * w / 4, w));
​/// 等待用户按键waitKey();return 0;
}
​
void MyFilledCircle(Mat img, Point center)
{int thickness = -1;int lineType = 8;
​circle(img,center,w / 32.0,Scalar(0, 0, 255),thickness,lineType);
}
void MyPolygon(Mat img)
{int lineType = 8;
​/** 创建一些点 */Point rook_points[1][20];rook_points[0][0] = Point(w / 4.0, 7 * w / 8.0);rook_points[0][1] = Point(3 * w / 4.0, 7 * w / 8.0);rook_points[0][2] = Point(3 * w / 4.0, 13 * w / 16.0);rook_points[0][3] = Point(11 * w / 16.0, 13 * w / 16.0);rook_points[0][4] = Point(19 * w / 32.0, 3 * w / 8.0);rook_points[0][5] = Point(3 * w / 4.0, 3 * w / 8.0);rook_points[0][6] = Point(3 * w / 4.0, w / 8.0);rook_points[0][7] = Point(26 * w / 40.0, w / 8.0);rook_points[0][8] = Point(26 * w / 40.0, w / 4.0);rook_points[0][9] = Point(22 * w / 40.0, w / 4.0);rook_points[0][10] = Point(22 * w / 40.0, w / 8.0);rook_points[0][11] = Point(18 * w / 40.0, w / 8.0);rook_points[0][12] = Point(18 * w / 40.0, w / 4.0);rook_points[0][13] = Point(14 * w / 40.0, w / 4.0);rook_points[0][14] = Point(14 * w / 40.0, w / 8.0);rook_points[0][15] = Point(w / 4.0, w / 8.0);rook_points[0][16] = Point(w / 4.0, 3 * w / 8.0);rook_points[0][17] = Point(13 * w / 32.0, 3 * w / 8.0);rook_points[0][18] = Point(5 * w / 16.0, 13 * w / 16.0);rook_points[0][19] = Point(w / 4.0, 13 * w / 16.0);
​const Point* ppt[1] = { rook_points[0] };int npt[] = { 20 };
​fillPoly(img,ppt,npt,1,Scalar(255, 255, 255),lineType);
}
​
void MyEllipse(Mat img, double angle)
{int thickness = 2;int lineType = 8;
​ellipse(img,Point(w / 2.0, w / 2.0),Size(w / 4.0, w / 16.0),angle,0,360,Scalar(255, 0, 0),thickness,lineType);
}
​
void MyLine(Mat img, Point start, Point end)
{int thickness = 2;int lineType = 8;line(img,start,end,Scalar(0, 0, 0),thickness,lineType);
}

4.结果

OpenCV 【十五】绘直线/椭圆/矩形/圆及其填充相关推荐

  1. java画出斜椭圆_【转】画图java源代码,只画直线,矩形,椭圆

    /* *只画直线,矩形,椭圆,只能向右下角画 * *PainterPanel extends JPanel implements MouseListener *addMouseListener(thi ...

  2. Java画图(直线,矩形,椭圆),并显示其周长面积

    Shape类 父类 package com.lovoinfo.shape;import java.awt.Color; import java.awt.Graphics; /*** 图形(抽象类,不能 ...

  3. 【OpenCV3】几何图形(直线、矩形、圆、椭圆、多边形等)绘制

    在图像处理的过程中,我们有时需要在图像或者视频上画上一些图案或者绘上一些文字.OpenCV中提供了各种功能的绘图函数,使用这些函数,我们可以在图像上绘制直线.矩形.圆.椭圆.多边形等等. 1.cv:: ...

  4. QT+opencv学习笔记(5)——霍夫直线检测、圆检测及椭圆检测

    开发环境为:win10+QT5.8+opencv3.2 Hough变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛.最基本的Hough变换是从黑白图像中检测直线,还可以经过改进检测圆.椭 ...

  5. halcon中如何生成椭圆_Halcon拟合系列(2)直线/圆/椭圆/矩形拟合算子

    fit_line_contour_xld.hdev fit_line_contour_xld(Contours : : Algorithm, MaxNumPoints, ClippingEndPoin ...

  6. [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. OpenCV学习笔记(十一)(十二)(十三)(十四)(十五)

    OpenCV学习笔记(十一)--谈谈像素的类型和对Templates的限制使用 Templates是c++的一个很强大的特征,可以是数据结构更加安全高效.但也会增加编译时间和代码的长度,当函数被频繁调 ...

  8. 【OpenCV入门教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云(浅墨) ...

  9. 【OpenCV新手教程之十五】水漫金山:OpenCV漫水填充算法(Floodfill)

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云(浅墨) ...

最新文章

  1. 母亲,我怎么让妳等了那么久...
  2. 【C 语言】字符串模型 ( strstr-while 模型 )
  3. python调用win32_python调用win32接口进行截图
  4. 4 读写文件_WEB安全之SQL注入(4)——读写文件
  5. 181124每日一句
  6. OpenCV 图片模糊处理
  7. Spark项目实践--基于 TMDB 数据集的电影数据分析
  8. pyboard :红外遥控模块,class UART
  9. JDK的下载及其安装
  10. ubuntu安装flash_如何在Ubuntu Linux上安装最新版本的Flash
  11. AI,让大海永远蔚蓝如诗
  12. 利用阿里云服务器制作一个浪漫的表白网页
  13. 一般人我不告诉的bug
  14. android usb触摸屏idc实现触摸唤醒
  15. 3D设计软件中怎么创建风扇叶模型?浩辰3D基础教程
  16. DDD兴起的原因,以及与微服务的关系
  17. PC虚拟现实应用的性能分析与优化:从CPU角度切入
  18. python写酒店管理系统报告_酒店管理系统python
  19. 啦啦外卖小程序不能获取用户头像
  20. WPS 2019 去除自动升级 和 广告、及优化的点

热门文章

  1. 【C++】多态(早期绑定、后期绑定)、抽象类(纯虚函数)、虚析构函数
  2. Java测试List<Object>根据其某个属性去重俩种方法效率
  3. python基础知识整理 第一节:入门记录(包含代码与执行结果)
  4. 如何设计电桥传感器驱动电路?
  5. 二、深度学习数据增强方法汇总
  6. PCL的PNG文件和计算点云重心
  7. 修改vscode的语言
  8. VSCode设置合并行快捷键
  9. 在Ubuntu 14.04 64bit上安装Markdown编辑器Remarkble
  10. 在Ubuntu 14.04 64bit上安装MongoDB并测试