在图像处理与计算机图形学中,随机数与随机颜色的生成常用于增强图像的多样性、可视化多个目标区域、模拟自然现象以及生成测试数据等任务。通过随机化元素的颜色、位置或形状,可以使程序在动态展示、调试输出、以及数据增强等方面更加灵活和丰富。
例如,在目标检测或图像分割结果中,不同的检测区域或类别往往使用不同的颜色进行区分,这些颜色通常通过随机方式生成。利用 OpenCV 配合 C++ 的随机数生成器,可以方便地创建随机坐标、随机颜色(RGB)值等,为图像绘制提供更高的自由度与视觉效果。
现在来编写程序进行实验:同样是在我们之前所创建的类中定义一个方法的Demo
class Demo{
public:
void colorspace_Demo(Mat &image);
void Mat_creat(Mat &image);
void pixel_RW_Demo(Mat &image);
void operator_Demo(Mat &image);
void Tracking_Demo(Mat &image);
void Color_Demo(Mat &image);
void bitwise_Demo(Mat &image);
void channel_Demo(Mat &image);
void inrange_Demo(Mat &image);
void pixel_statistics_Demo(Mat &image);
void Shapes_Demo(Mat &image);
void polygon_drawing_Demo();
void random_Demo();
};
紧接着我们回到cpp文件中定义这个函数;
void Demo::random_Demo()
{
Mat background = Mat::zeros(Size(512,512),CV_8UC3);
RNG rng(12345);
int w = background.cols;
int h = background.rows;
while (1)
{
int key = waitKey(10);
if (key == 27)break;
if (key == ' ')
{
int x1 = rng.uniform(0,w);
int y1 = rng.uniform(0,h);
int x2 = rng.uniform(0,w);
int y2 = rng.uniform(0,h);
line(background,Point(x1,y1),Point(x2,y2),Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255)),4,LINE_4);
imshow("i",background);
}
}
}
这段代码是是在按下空格键时随机生成两点并绘制一条随机颜色的线段,不断叠加到同一张画布上,直到按下 Esc
键退出。
RNG rng(12345);
创建一个随机数生成器 rng
,种子值为 12345
,用于生成随机数。
使用 rng.uniform(a, b)
随机生成 [a, b)
区间内的整数,表示线段的两个端点 (x1, y1)
和 (x2, y2)
。Scalar(B, G, R)
表示线条颜色,这里通过 rng.uniform(0,255)
为每个通道随机生成值,实现随机颜色。
运行即可得到:
我们修改代码让其自动生成不再空格控制: