十五、随机数和随机颜色

项目功能实现:在原图上进行每隔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);

	}
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Fiddler工具 — 19.Fiddler抓包HTTPS请求(二)

5、查看证书是否安装成功 方式一&#xff1a; 点击Tools菜单 —> Options... —> HTTPS —> Actions 选择第三项&#xff1a;Open Windows Certificate Manager打开Windows证书管理器。 打开Windows证书管理器&#xff0c;选择操作—>查看证书&#xff0c;在搜索…

【C++精简版回顾】6.构造函数

一。类的三种初始化方式 1.不使用构造函数初始化类 使用函数引用来初始化类 class MM { public:string& getname() {return name;}int& getage() {return age;}void print() {cout << "name: " << name << endl << "age: &quo…

跨境电商消息多发脚本制作需要用到的代码!

在跨境电商的运营中&#xff0c;为了更有效地推广产品、提升品牌知名度并增强与消费者的互动&#xff0c;消息群发成为了一个重要的营销手段。 为了实现这一目的&#xff0c;许多跨境电商团队会选择制作消息多发脚本&#xff0c;通过自动化发送消息来提高效率和覆盖面&#xf…

Postman接口测试之Mock快速入门

一、Mock简介 1.Mock定义 Mock是一种比较特殊的测试技巧&#xff0c;可以在没有依赖项的情况下进行接口或单元测试。通常情况下&#xff0c;Mock与其他方法的区别是&#xff0c;用于模拟代码依赖对象&#xff0c;并允许设置对应的期望值。简单一点来讲&#xff0c;就是Mock创建…

LabVIEW多通道压力传感器实时动态检测

LabVIEW多通道压力传感器实时动态检测 介绍了一种基于LabVIEW的多通道压力传感器实时动态检测系统&#xff0c;解决压阻式压力传感器温度补偿过程的复杂度&#xff0c;提高测量的准确性。通过自动轮询检测方法&#xff0c;结合硬件检测模型和多通道检测系统设计&#xff0c;本…

ADC--模拟量转换成数字量

目录 一、ADC硬件组成七大部分&#xff1a; 二、单次转换&#xff0c;连续转换&#xff0c;不连续采样模式&#xff0c;扫描模式区别 1、举例(5种组合情况) 2、模拟看门狗中断的作用&#xff1a; 三、MCU使用ADC步骤 一、ADC硬件组成七大部分&#xff1a; ①输入电压&#…

C#知识点-14(索引器、foreach的循环原理、泛型、委托)

索引器 概念&#xff1a;索引器能够让我们的对象&#xff0c;以索引&#xff08;下标&#xff09;的形式&#xff0c;便捷地访问类中的集合&#xff08;数组、泛型集合、键值对&#xff09; 应用场景&#xff1a; 1、能够便捷地访问类中的集合 2、索引的数据类型、个数、顺序不…

【Linux】普通用户sudo失败怎么办

普通用户&#xff0c;sudo失败报错怎么办 问题分析如何解决成功 问题分析 新建的普通用户sudo失败 sudo提权&#xff0c;是以root的身份执行命令。 当我们用sudo提升权限的时候&#xff0c;这里有个问题&#xff0c;Linux会提示我们输入当前普通用户的密码——这就有点不好。…

机器人内部传感器阅读笔记及心得-位置传感器-旋转变压器、激光干涉式编码器

旋转变压器 旋转变压器是一种输出电压随转角变化的检测装置&#xff0c;是用来检测角位移的&#xff0c;其基本结构与交流绕线式异步电动机相似&#xff0c;由定子和转子组成。 旋转变压器的原理如图1所示&#xff0c;定子相当于变压器的一次侧&#xff0c;有两组在空间位置上…

华清远见嵌入式学习——驱动开发——DAY8

作业要求&#xff1a; 1.使用GPIO子系统编写LED灯驱动&#xff0c;应用程序测试 2.注册三个按键的中断&#xff0c;只需要写内核代码 需要发布到CSDN 作业答案&#xff1a; GPIO子系统&#xff1a; 代码效果&#xff1a; 应用程序&#xff1a; #include<stdlib.h> …

网页403错误(Spring Security报异常 Encoded password does not look like BCrypt)

这个错误通常表现为"403 Forbidden"或"HTTP Status 403"&#xff0c;它指的是访问资源被服务器理解但拒绝授权。换句话说&#xff0c;服务器可以理解你请求看到的页面&#xff0c;但它拒绝给你权限。 也就是说很可能测试给定的参数有问题&#xff0c;后端…

fastApi笔记05-路径参数和数值校验

使用Path可以对路径参数声明与Query相同类型的校验和元数据 from typing import Annotatedfrom fastapi import FastAPI, Path, Queryapp FastAPI()app.get("/items/{item_id}") async def read_items(item_id: Annotated[int, Path(title"The ID of the item …

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

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

【LeetCode】升级打怪之路 Day 01:二分法

今日题目&#xff1a; 704. 二分查找35. 搜索插入位置34. 在排序数组中查找元素的第一个和最后一个位置 目录 今日总结Problem 1: 二分法LeetCode 704. 二分查找 【easy】LeetCode 35. 搜索插入位置 ⭐⭐⭐⭐⭐LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 【medi…

MySQL加锁策略详解

我们主要从三个方面来讨论这个问题&#xff1a; 啥时候加&#xff1f;如何加&#xff1f;什么时候该加什么时候不该加&#xff1f; 1、啥时候加 1.1 显式锁 MySQL 的加锁可以分为显式加锁和隐式加锁&#xff0c;显式加锁我们比较好识别的&#xff0c;因为他往往直接体现在 S…

SketchUp好用的插件介绍!最后一个渲染必备

在3D设计的世界里&#xff0c;SketchUp因其用户友好的界面和高效能特性而广受欢迎。如果你期望扩展SketchUp的功能范围&#xff0c;市场上提供了众多插件&#xff0c;它们能够帮助你更进一步地取得专业级的设计效果。让我们一探究竟&#xff01; 1、Multiple Offsets 由Sam D …

Leo赠书活动-18期 《高效使用Redis》

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

mac真的安装不了vmware吗 mac如何安装crossover crossover序列号从哪里买 购买正版渠道

有些用户可能想在mac上运行一些只能在windows上运行的软件&#xff0c;比如游戏、专业软件等。这时候&#xff0c;就需要用到虚拟机技术&#xff0c;也就是在mac上安装一个可以模拟其他操作系统的软件&#xff0c;比如vmware或者crossover。那么&#xff0c;mac真的安装不了vmw…

js谐音梗创意小游戏《望子成龙》

&#x1f33b; 前言 龙年到来&#xff0c;祥瑞满天。愿您如龙般矫健&#xff0c;事业腾飞&#xff1b;如龙鳞闪耀&#xff0c;生活美满。祝您龙年大吉&#xff0c;万事如意&#xff01; 龙年伊始&#xff0c;我给各位设计了一款原创的小游戏&#xff0c;话不多说&#xff0c;直…

WP----Look 我看的见你,你却看不见我 tips:sql injection tips2: mysql 字符集

0x00 题目连接打开后&#xff0c;是空白的&#xff0c;源代码也是空白的 这种情况就抓包&#xff0c;看请求包和相应包里面是否有提示 相应包中存在很特别的响应头X-HT: verify 可能是参数&#xff0c;传递任意参数过去 0x01 传递5个长度的参数时&#xff0c;返回 说明参数的…