OpenCV 绘制正多边形

#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\contrib\contrib.hpp>    #include <fstream> using namespace cv;
using namespace std;void DeleteRepetition(vector<Point> &Data)
{vector<Point>::iterator it, it1;for (it = ++Data.begin(); it != Data.end();) {it1 = find(Data.begin(), it, *it);if (it1 != it) it = Data.erase(it);else it++;}
}void Patterns(Mat *src, vector<Point> Dots, int fill)
{DeleteRepetition(Dots);if (fill == -1){Point *ImgDot = new Point(Dots.size());for (int i = 0; i < Dots.size(); i++) {ImgDot[i] = Dots[i];}const Point* ppt = ImgDot;int npt = Dots.size();RNG &rng = theRNG();Scalar color = Scalar(rng.uniform(100, 255), rng.uniform(100, 255), rng.uniform(100, 255));cv::fillPoly(*src, &ppt, &npt, 1, color);}else{Dots.push_back(Dots[0]);RNG &rng = theRNG();Scalar color = Scalar(rng.uniform(100, 255), rng.uniform(100, 255), rng.uniform(100, 255));for (int i = 0; i < Dots.size() - 1; i++){line(*src, Dots[i], Dots[i + 1], color, fill);}}
}// https://www.w3cplus.com/canvas/drawing-regular-polygons.html
// http://www.cnblogs.com/xcywt/p/9456526.html
// 图像、中心点、半径、边数、旋转角度、线宽
void EquilateralPolygon(Mat *src, Point origin, int radius, int brim, int rotate, int fill)
{if (brim < 3) return;if (rotate > 360) return;#define PI 3.14159265
#define ROTATE_COUNT 180double nAgree = 360 / brim;  // 计算旋转角度double a = radius * cos(PI / brim);      // 计算垂直向下的长度double s = 2 * radius * sin(PI / brim);  // 计算边长vector<Point> Dots;Point D1, D2;D1.x = origin.x + radius*cos(-(((180 - nAgree) / 2) + rotate) * PI / 180);D1.y = origin.y - radius*sin(-(((180 - nAgree) / 2) + rotate) * PI / 180);D2.x = origin.x + radius*cos(-(((180 - nAgree) / 2) + nAgree + rotate) * PI / 180);D2.y = origin.y - radius*sin(-(((180 - nAgree) / 2) + nAgree + rotate) * PI / 180);// 第一条边的两个点Dots.push_back(D1);Dots.push_back(D2);for (int i = 0; i < brim - 2; i++){double dSinRot = sin((nAgree * (i + 1)) * PI / 180);double dCosRot = cos((nAgree * (i + 1)) * PI / 180);int x = origin.x + dCosRot * (D2.x - origin.x) - dSinRot * (D2.y - origin.y);int y = origin.y + dSinRot * (D2.x - origin.x) + dCosRot * (D2.y - origin.y);Dots.push_back(Point(x, y));}Patterns(src, Dots, fill);Dots.clear();
}int main()
{Mat    Img = Mat::zeros(800, 800, CV_8UC3);Point O = Point(400, 400);circle(Img, O, 2, Scalar(0, 0, 255), -1); //中心点EquilateralPolygon(&Img, O, 100, 3, 0, -1); // 填充的正三角形EquilateralPolygon(&Img, O, 200, 3, 0, 1);  // 不填充的正三角形EquilateralPolygon(&Img, O, 200, 3, 30, 1); // 不填充的正三角形,顺时针旋转30度EquilateralPolygon(&Img, O, 200, 3, 60, 1); // 不填充的正三角形,顺时针旋转60度EquilateralPolygon(&Img, O, 200, 3, 90, 1); // 不填充的正三角形,顺时针旋转90度EquilateralPolygon(&Img, O, 200, 3, 120, 1);// 不填充的正三角形,顺时针旋转120度EquilateralPolygon(&Img, O, 200, 3, 150, 1);// 不填充的正三角形,顺时针旋转150度EquilateralPolygon(&Img, O, 200, 3, 180, 1);// 不填充的正三角形,顺时针旋转180度EquilateralPolygon(&Img, O, 230, 4, 0, 2); // 不填充的正四边形EquilateralPolygon(&Img, O, 250, 5, 0, 3); // 不填充的正五边形EquilateralPolygon(&Img, O, 270, 6, 0, 4); // 不填充的正六边形EquilateralPolygon(&Img, O, 290, 7, 0, 5); // 不填充的正七边形EquilateralPolygon(&Img, O, 310, 8, 0, 6); // 不填充的正八边形EquilateralPolygon(&Img, O, 330, 9, 0, 7); // 不填充的正九边形EquilateralPolygon(&Img, O, 350, 10, 0, 8);// 不填充的正十边形imshow("正多边形", Img);waitKey(0);return 0;
}

效果如下:

OpenCV 绘制正多边形相关推荐

  1. 使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果

    使用Python,Opencv绘制调色板及圆形来模拟霓虹的渐变效果 1. 效果图 2. 源码 参考 这篇博客将使用python,opencv绘制调色板及圆形来模拟霓虹的渐变效果. 1. 效果图 可以构 ...

  2. 计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~

    计算机视觉开源库OpenCV绘制轮廓,并将轮廓排序~示例效果如下: 原图: 示例代码如下: #!/usr/bin/env python3import cv2def sort_contours(cnts ...

  3. OpenCV绘制等高线Contours的实例(附完整代码)

    OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 OpenCV绘制等高线Contour的实例 #include "opencv2/imgproc.hpp ...

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

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

  5. 详解用OpenCV绘制各类几何图形

    本文分享自华为云社区<[Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形>,作者:eastmount. 一.绘制直线 在OpenCV中,绘制直线需要获取直线的起 ...

  6. OpenCV绘制线、矩形、圆等基本几何形状

    OpenCV绘制线.矩形.圆.椭圆等基本几何形状 画线 画矩形 画圆 通过javaOpenCV中的Imgproc函数进行简单几何图形的绘制 画线 代码 public class DemoMat {st ...

  7. opencv 绘制图像轮廓

    图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形. 谈起轮廓不免想到边缘,它们确实很像.简单的说,轮廓是连续的,边缘并不全都连续(下图).其实边缘主要是作为图像的特征使用,比如可以用 ...

  8. Opencv绘制HSV颜色直方图

    一. 使用Opencv绘制HSV颜色直方图 所用的函数 cvCvtColor 可在: 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图 文章中查找相关介绍 所使用的结构体: CvHisto ...

  9. python opencv 绘制简单图形

    09-python opencv 绘制简单图形 09-python opencv 绘制简单图形 概述 实现过程 引用与创建空图 绘制直线 绘制矩形 绘制圆 绘制椭圆 添加文字 显示图像 源代码 运行结 ...

最新文章

  1. 福利 | 16场精选活动干货、精华笔记、课件分享:数据派独家讲座干货大合集
  2. 沈南鹏谈科学:第一性原理,“无为”而“有趣”
  3. 产品观,来自微信张小龙的
  4. 计算机中flow和stream还有torrent有什么区别?(五元组、microflow、traffic flow)
  5. java数组二分查找的简单例题_Java基础-练习 数组元素二分查找(折半查找)
  6. python爬虫脚本ie=utf-8_Python反爬虫伪装浏览器进行爬虫
  7. iosselect简单使用(三级联动)
  8. java 集合addall_Java集合的addAll()方法和示例
  9. Java PreparedStatement
  10. day4-软件目录开发规范
  11. C#OOP之十一 委托和事件
  12. mysql导入sql文件乱码或者报错unknown command
  13. apache tuscany(一)
  14. WindowsXP3环境下IIS5.1的部分小文件
  15. 人脸对齐—3DDFA
  16. Nagios基本介绍
  17. 学大伟业:化学竞赛学习规划与推荐书目
  18. (10)python中的赋值方法
  19. 高中数学必修一函数知识点总结
  20. Java-基于SSM的体育竞赛成绩管理系统

热门文章

  1. 【electron】打开离线包-双击文件打开关联应用
  2. ognlognl表达式 研究
  3. 首饰logo创意欣赏 - 设计商标 - logo公司
  4. 神经退行性疾病的新希望
  5. 来自一个入行三年半的大数据练习生自述
  6. 新版TCGA数据库学习:批量下载新版TCGA数据
  7. [Stellaris][群星]Mod制作指南-附录
  8. 你一定没见过这么有意思的电路板
  9. 电路板故障排查与维修
  10. 如何更改您的Apple Watch表带(不花一吨)