在圖像處理與計算機圖形學中,隨機數與隨機顏色的生成常用于增強圖像的多樣性、可視化多個目標區域、模擬自然現象以及生成測試數據等任務。通過隨機化元素的顏色、位置或形狀,可以使程序在動態展示、調試輸出、以及數據增強等方面更加靈活和豐富。
例如,在目標檢測或圖像分割結果中,不同的檢測區域或類別往往使用不同的顏色進行區分,這些顏色通常通過隨機方式生成。利用 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)
為每個通道隨機生成值,實現隨機顏色。
運行即可得到:
我們修改代碼讓其自動生成不再空格控制:?