十五、随机数和随机颜色

项目功能实现:在原图上进行每隔0.5s随机绘制不同长度不同颜色的线段(保存之前的线段),在另一个画布上进行绘制随机不同长度不同颜色的线段(不保存之前的线段)

按照之前的博文结构来,这里就不在赘述了

一、头文件

random.h

#pragma once#include<opencv2/opencv.hpp>using namespace cv;class RANDOM {
public:void random(Mat& image);
};#pragma once

二、函数实现

random.cpp

Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
定义一个全黑的大小为512*512的画布canvas

RNG rng(990522);
根据电脑系统的时钟进行设置随机种子

high = canvas.rows;wide = canvas.cols;
获取画布的高和宽

x1 = rng.uniform(0, wide);
在0和wide之间随机取值
其他的均类似

canvas = Scalar(0, 0, 0);
因为每次画布上的线段都不保存,故每次循环都要对其进行初始化
line(canvas, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 1, LINE_AA, 0);
之后才进行绘制,该函数详细说明可参考博文:十四、图像几何形状绘制
参数一:要操作的图片对象
参数二:初始位置
参数三:最终位置
参数四:线条颜色
参数五:线条粗细
参数六:绘制线条时会出现锯齿,对其进行优化,等价于16,对周围16个像素点进行调优
参数七:微调相当于一个偏置项

line(image, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 1, LINE_AA, 0);
原图保存之前的线段,故可以直接绘制即可

#include"random.h"
#include<iostream>
#include<opencv2/opencv.hpp>void RANDOM::random(Mat& image) {Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);RNG rng(990522);int high, wide;high = canvas.rows;wide = canvas.cols;int x1, x2, y1, y2,b, g, r;while(true) {int c = waitKey(500);if (c == 27) {break;}x1 = rng.uniform(0, wide);y1 = rng.uniform(0, high);x2 = rng.uniform(0, wide);y2 = rng.uniform(0, high);b = rng.uniform(0, 255);g = rng.uniform(0, 255);r = rng.uniform(0, 255);canvas = Scalar(0, 0, 0);line(canvas, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 1, LINE_AA, 0);line(image, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 1, LINE_AA, 0);imshow("random_drawing", canvas);imshow("image_drawing", image);}
}

三、主函数

yy_main.cpp

#include <opencv2/opencv.hpp>
#include <iostream>
#include "random.h"using namespace cv;
using namespace std;int main(int argc, char** argv) {Mat src = cv::imread("E:/C++_workspace/beyond.jpg", IMREAD_COLOR);if (src.empty()) {printf("load image is false...\n");return -1;}namedWindow("yanyu", WINDOW_FREERATIO);imshow("yanyu", src);RANDOM yy;yy.random(src);waitKey(0);destroyAllWindows();return 0;
}

项目结构如下:
在这里插入图片描述

效果图如下:
在这里插入图片描述

四、课后作业

项目功能实现:在原图上进行每隔0.5s随机绘制不同长度不同颜色的线段(不保存之前的线段),在另一个画布上进行绘制随机不同长度不同颜色的线段(保存之前的线段)
random.cpp
和之前的功能效果刚好相反

beyond = image.clone();
这里只需要对原图克隆一下,每次绘制线段的时候都在原始图像上进行绘制,绘制之前都要进行初始化

同时因为画布要保存之前的线段,把初始化操作canvas = Scalar(0, 0, 0);去掉即可

代码如下:

#include"random.h"
#include<iostream>
#include<opencv2/opencv.hpp>void RANDOM::random(Mat& image) {Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);Mat beyond;RNG rng(990522);int high, wide;high = canvas.rows;wide = canvas.cols;int x1, x2, y1, y2,b, g, r;while(true) {int c = waitKey(500);if (c == 27) {break;}x1 = rng.uniform(0, wide);y1 = rng.uniform(0, high);x2 = rng.uniform(0, wide);y2 = rng.uniform(0, high);b = rng.uniform(0, 255);g = rng.uniform(0, 255);r = rng.uniform(0, 255);line(canvas, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 1, LINE_AA, 0);beyond = image.clone();line(beyond, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 1, LINE_AA, 0);imshow("random_drawing", canvas);imshow("image_drawing", beyond);}
}

效果图如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/484329.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Uncaught SyntaxError: Cannot use import statement outside a module(at XXX)报错

报错原因&#xff1a;这个错误通常是因为你正在尝试在一个不支持 ES6 模块语法的环境中使用 import 语句。这可能是因为你的代码是在一个只支持 CommonJS 或 AMD 模块系统的环境中运行的&#xff0c;或者你的代码运行的环境没有正确配置以支持 ES6 模块。如果是在浏览器环境&am…

2024年了,抖店还能做吗?适合新手吗?

我是电商珠珠 现在已经24年了&#xff0c;抖店也已经发展了四年了。其中有很多在门外观望的人&#xff0c;还在犹豫不决。认为抖店发展到今天&#xff0c;所有的红利早已在20年的时候就消失殆尽了&#xff0c;特别是没有经验的如果入驻了&#xff0c;既不能享受平台红利&#…

easyexcel写入long类型数据精度丢失

1. 前言 在使用easyExcel导出Excel中 发现 long类型的数据格式精度丢失了 问题如下 尾数都成了00000 精度发生了丢失 2. 解决 将long类型的字段转成String 写入到Excel中增加解析器 LongStringConverter 例如 /*** 文件导出** param outputStream outputStream* param cla…

运行jar时提示缺少依赖的类

供应商丢过来一个jar&#xff0c;是用Java写的Windows桌面程序&#xff0c;运行jar时提示缺少依赖的类&#xff0c;一看就是打包没带依赖的库&#xff0c;下面是解决方法&#xff1a; 1、解压缩jar&#xff0c;查看 META-INF 目录下的 MANIFEST.MF&#xff0c;看看都引用了哪些…

软考-中级-系统集成2023年综合知识(一)

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 软考中级专栏回顾 专栏…

navicat连接postgresql报错 column “datlastsysoid“ does not exist

column "datlastsysoid" does not exist 是由于pgsql 15版本以后&#xff0c;系统表的列名改了&#xff0c;pg_database表里的这一个列被删除了导致 解决办法&#xff1a; 1、将navicat升级到16.2以上版本 2、降级pgsql 3、修改dll配置文件 找到navicat安装目录…

软件开发工程师,几款常用的APP,你用过几款?最后一个测试网络必备

作为一名程序员&#xff0c;手机里一定有几个常用的app&#xff0c;下面给大家推荐几款。 1. CSDN 国内最大编程论坛&#xff1b;虽然有多少人吐槽现在使用csdn就像屎里淘金&#xff0c; 但是不得不承认他仍然是大家搜索技术资料、问题的首选。 遇到问题打开app搜索&#x…

算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习三(leetcode真题剖析)

算法沉淀——穷举、暴搜、深搜、回溯、剪枝综合练习三 01.字母大小写全排列02.优美的排列03.N 皇后04.有效的数独 01.字母大小写全排列 题目链接&#xff1a;https://leetcode.cn/problems/letter-case-permutation/ 给定一个字符串 s &#xff0c;通过将字符串 s 中的每个字…

2024年noc比赛Coding创意编程赛项-创意实验室初赛模拟题

【单选题】 1.角色本来面向的方向是右方,执行下方积木后,角色面向的方向是() A.面向右上方 C.面向左上方 B.面向右下方 D.面向左下方 2.下列选项中关于图中按钮功能说法错误的是() A."本地传”按钮可以从本地电脑上传素材 B."重新画”按钮可以自己设计素材 C"…

typescript映射类型

ts映射类型简介 TypeScript中的映射类型&#xff08;Mapped Type&#xff09;是一种高级类型&#xff0c;它允许我们基于现有类型创建新的类型&#xff0c;同时对新类型的每个属性应用一个转换函数。通过使用映射类型&#xff0c;我们可以方便地对对象的属性进行批量操作&…

[TCP] TCP/IP 基础知识词典(2)

我想统计一下&#xff0c;TCP/IP 尤其是TCP协议&#xff0c;能搜到的常见的问题&#xff0c;整理起来&#xff0c;关键词添加在目录中&#xff0c;便于以后查阅。 目前预计整理共3篇&#xff1a; [TCP] TCP/IP 基础知识问答 &#xff1a;基础知识 [TCP] TCP/IP 基础知识问答&…

【论文精读】IBOT

摘要 掩码语言建模(MLM)是一种流行的语言模型预训练范式&#xff0c;在nlp领域取得了巨大的成功。然而&#xff0c;它对视觉Transformer (ViT)的潜力尚未得到充分开发。为在视觉领域延续MLM的成功&#xff0c;故而探索掩码图像建模(MIM)&#xff0c;以训练更好的视觉transforme…