15 随机数与随机颜色
15 随机数与随机颜色
opencv知识点:
- 随机数 - RNG
- 线段绘制 - line()
本课所解决的问题:
- 如何在绘制图形中利用到随机数?
1.利用随机数设置坐标与颜色
我们绘制一个线段,把两个点的坐标,还有三个通道的颜色都设置为了随机数得到
//函数定义
void randow_drawing();
//函数实现
void QuickDemo::randow_drawing() {
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
int w = canvas.cols;
int h = canvas.rows;
RNG rng(5465);//我们随便输入1个数作为种子
while (true) {
int c = waitKey(10);
if (c == 27) {//退出
break;
}
int x1 = rng.uniform(0, w);
int y1 = rng.uniform(0, h);
int x2 = rng.uniform(0, w);
int y2 = rng.uniform(0, h);
int b = rng.uniform(0, 255);
int g = rng.uniform(0, 255);
int r = rng.uniform(0, 255);
line(canvas, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 1, 8, 0);
imshow("随机线段", canvas);
}
}
详细的程序#
main.cpp#
#include "opencv2/opencv.hpp"
#include "quickopencv.h"
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src = imread("C:/Users/LZQ/Desktop/lena.png"); // B, G, R
if (src.empty()) {
printf("could not load image....\n");
return -1;
}
imshow("输入窗口", src);
QuickDemo qd;
qd.random_drawing();
waitKey(0);
destroyAllWindows();
return 0;
}
quickdemo.cpp#
void QuickDemo::random_drawing() {
Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);
int w = canvas.cols;
int h = canvas.rows;
RNG rng(5465); //我们随便输入1个数作为种子
while (true) {
int c = waitKey(10);
if (c == 27) { //退出
break;
}
int x1 = rng.uniform(0, w);
int y1 = rng.uniform(0, h);
int x2 = rng.uniform(0, w);
int y2 = rng.uniform(0, h);
int b = rng.uniform(0, 255);
int g = rng.uniform(0, 255);
int r = rng.uniform(0, 255);
line(canvas, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 1, 8, 0);
imshow("随机线段", canvas);
}
}
quickopencv.h#
#pragma once
#include <opencv2/opencv.hpp>
using namespace cv;
class QuickDemo { //快速的演示文件 class类
public:
void random_drawing(); //15
};
结果#
本课所用API查阅
RNG#
RNG(Random Number Generator,随机数生成器)是opencv中的一个随机数生成器类
uniform是RNG中的一个方法,uniform(a,b),指定数的范围为(a,b)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步