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. shell高级编程--引用
  2. 2021总结,2022展望
  3. python爬虫抓取51cto博客大牛的文章保存到MySQL数据库
  4. WEB运用程序如何实现高效可维护?
  5. Model-Based RL前沿追踪——以无法为有法,以无形为有形
  6. HTML5 列表和表格
  7. rabbitmq direct 多个消费者_RabbitMQ从零开始
  8. 解决Bootstrap模态窗口Modal中使用Kindeditor或UEditor编辑器 点击关闭弹窗 出现第二次无法加载的问题
  9. 如何设置迪文DGUS屏的字体效果?
  10. 姓氏头像制作小程序源码_全新UI带头像库_支持多流量主模式
  11. 离线语音控制系统 唤醒词.命令字
  12. 区分当前用户SIM卡是移动还是联通
  13. 保护手机隐私最关键是提高全民信息安全意识
  14. 《自控力》-- 精华摘抄
  15. 淘宝美工设计需要掌握什么技能 ?小白如何快速学会美工设计?
  16. Android 模拟器 计步器,春雨计步器怎样刷步数图文教程
  17. 统计 Git 代码行数
  18. 【操作系统基础】进程管理(三)进程同步与互斥
  19. ssm餐厅线上点菜系统、点餐系统的设计与实现
  20. 聊聊跨端技术的本质与现状

热门文章

  1. C# WPF 获取系统文化和国家信息(CultureInfo)类
  2. 计算机SCI 源代码,计算机类SCI检索源刊
  3. RFID公安物证系统
  4. 获取一年的最后一天是多少号
  5. Quick 书签菜单插件使用方法
  6. 上海交大计算机考试科目,上海交通大学需要选什么科目?附上海交通大学必选科目...
  7. while 和 for 循环 :for循环输出九九乘法表
  8. 浙江计算机学校都有哪些,浙江2021年最好的计算机学校有哪些
  9. 【进阶实战】使用PaddlePaddle测试土壤有机质预测含氮量
  10. 学会VBA,菜鸟也高飞!