首页 > 编程语言 >【C++】OpenCV4-线条、矩形、圆形、椭圆等图形的绘制与填充、RNG随机函数的使用

【C++】OpenCV4-线条、矩形、圆形、椭圆等图形的绘制与填充、RNG随机函数的使用

时间:2024-01-12 22:22:06浏览次数:29  
标签:canvas int RNG rng C++ uniform 绘制 OpenCV4 256

图形的绘制与填充:

//图形的绘制与填充
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
namedWindow("canvas", WINDOW_AUTOSIZE);
//相关绘制API演示
//绘制直线
line(canvas, Point(10, 10), Point(400, 400), Scalar(255, 0, 0), 1, LINE_8);
//绘制矩形
Rect rect(150, 150, 250, 250);
rectangle(canvas, rect, Scalar(0, 255, 0), 1, 8);
//绘制圆
circle(canvas, Point(256, 256), 100, Scalar(0, 255, 255), -1, 8);
//线粗为-1时自动填充颜色,大于0时就是普通的线粗
RotatedRect rrt;
rrt.center = Point2f(256, 256);
rrt.angle = 90.0;
rrt.size = Size(100, 200);
//绘制椭圆
ellipse(canvas, rrt, Scalar(0, 255, 0), -1, LINE_8);
imshow("canvas", canvas);

运行结果:

RNG随机函数的使用:

Mat image = Mat::zeros(Size(512, 512), CV_8UC3);
namedWindow("image", WINDOW_AUTOSIZE);

int x1 = 0, y1 = 0;
int x2 = 0, y2 = 0;
RNG rng(123456);
while (1) {
  x1 = (int)rng.uniform(0, 512); //设置随机值的范围
  x2 = (int)rng.uniform(0, 512);
  y1 = (int)rng.uniform(0, 512);
  y2 = (int)rng.uniform(0, 512);
  int w = abs(x2 - x1);
  int h = abs(y2 - y1);
  Rect rect;
  rect.x = x1;
  rect.y = y1;
  rect.width = w;
  rect.height = h;
  //在画布上随机绘制多个矩形
  /*rectangle(image, rect, Scalar(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256)), 1, 8);*/
  //在画布上随机绘制单个矩形
  image = Scalar(0, 0, 0);
  rectangle(image, Point(x1, y1), Point(x2, y2), Scalar(rng.uniform(0, 256), rng.uniform(0, 256), rng.uniform(0, 256)), 1, 8);

  imshow("image", image);
  char c = waitKey(10);
  if (c == 27) { //按Esc退出
    break;
  }
}

绘制多个矩形运行结果图:

标签:canvas,int,RNG,rng,C++,uniform,绘制,OpenCV4,256
From: https://www.cnblogs.com/smartlearn/p/17961713

相关文章

  • 刷题笔记——队列(C++)
    1696.跳跃游戏VI-力扣(LeetCode)给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。一开始你在下标 0 处。每一步,你最多可以往前跳 k 步,但你不能跳出数组的边界。也就是说,你可以从下标 i 跳到 [i+1,min(n-1,i+k)] 包含 两个端点的任意位置。你的目标是......
  • C/C++程序的内存开辟——《初学C语言第55天》
    //————C/C++程序的内存开辟C++程序内存分配的几个区域://intt=2;//staticintr=1;//voidtest()//{//  statice=1;//  intn=1;//  intarr[10]={1,2,3,4};//  charg[]="helloworld";//  char*p="abcd";//  int*a=(int*)malloc......
  • C++采集亚马逊amazon产品数据教程
    最近亚马逊电商非常火爆,今天我将用C++语言写一个亚马逊商品数据的爬虫程序,只要是用来收集一些产品相关信息。例如产品自身特性以及产品所对应的销量,为了后期布局亚马逊做一些参考,提供数据支持,同时另外我也会用C语言同样写一篇相关的爬虫教程,方便大家借鉴。首先,这是一个非常复杂的项......
  • C++模板例子
    title:"C++模板例子"date:2023-11-02T01:05:25+08:00tags:["C++"]categories:[]draft:false#include<vector>#include<type_traits>usingnamespacestd;classAA{};classBB{};classTest{public:template<cl......
  • C++中 统计程序执行耗时
    C++程序有时需要统计一段代码的执行消耗时间,可以通过类chrono库来进行计算。该库中常常使用两个类来进行计算时间:std::chrono::steady_clock:表示稳定的时钟std::chrono::system_clock:表示当前系统时钟代码如下#include<chrono>usingnamespacestd::chrono;doubleG......
  • 【C++/Qt】QLCDNumber-电子时钟实战
    头文件:#ifndefDIGITALCLOCK_H#defineDIGITALCLOCK_H#include<QLCDNumber>classdigitalClock:publicQLCDNumber{Q_OBJECTpublic:digitalClock(QWidget*parent=0);protected:voidmousePressEvent(QMouseEvent*event);//鼠标点击事件void......
  • 【C/C++】知识点笔记
    1-联合体内嵌结构体初始化赋值union{struct{inti;floatf;char*p;};into;}obj3={1,2.2,"sk",4,9};printf("structinlayunion:%d,%f,%s,%d\n",obj3.i,obj3.f,obj3.p,obj3.o);输出:structin......
  • C++ 拷贝构造函数
    拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:通过使用另一个同类型的对象来初始化新创建的对象。复制对象把它作为参数传递给函数。复制对象,并从函数返回这个对象。如果在类中没有定义拷......
  • agx orin 使用 sdm 刷机后,vscode 使用 C++ 版本的 opencv, 出现红色的波浪线,但是程序
    原因:vscode没有链接好opencv的头文件先找到opencv头文件的位置:sudofind/-iname"opencv"/usr/include/opencv4/usr/include/opencv4/opencv2解决:ctril+sheft+p:打开:c_cpp_properties.json,写入:"includePath":["${workspaceFo......
  • C++设计模式05 —— 装饰模式
    装饰模式过度的使用继承使得派生的子类过多,代码重复度很高,复用性变差。实现加密文件流、加密网络流、加密内存流、缓冲文件流、缓冲网络流、缓冲内存流。如果我们创建一个流基类,然后创建文件流继承流基类,最后创建加密文件流继承文件流、创建缓冲文件流继承文件流。如果这......