Random number generator (Drawing colorful random lines)

class RNG - Random number generator.


RNG::next - Returns the next random number.
RNG::operator T - Returns the next random number of the specified type.
RNG::operator uchar()
RNG::operator ushort()
RNG::operator int()
RNG::operator unsigned int()
RNG::operator float()
RNG::operator double()
RNG::uniform - Returns the next random number sampled from the uniform distribution.
float RNG::uniform(float a, float b)
double RNG::uniform(double a, double b)
RNG::gaussian - Returns the next random number sampled from the Gaussian distribution.
double RNG::gaussian(double sigma)

RNG::fill - Fills arrays with random numbers.
void RNG::fill(InputOutputArray mat, int distType, InputArray a, InputArray b, bool saturateRange=false )


Example:
------------
RNG rng;

// always produces 0
double a = rng.uniform(0, 1);

// produces double from [0, 1)
double a1 = rng.uniform((double)0, (double)1);

// produces float from [0, 1)
double b = rng.uniform(0.f, 1.f);

// produces double from [0, 1)
double c = rng.uniform(0., 1.);

// may cause compiler error because of ambiguity:
//  RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0, 0.99999)?
double d = rng.uniform(0, 0.999999);
------------

The code provided below is slight modification of code given in OpenCV documentation.

Example 1: ( Drawing Colorful Random Lines )

-------------
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace cv;
using namespace std;

void Drawing_Random_Lines( Mat image, char* window_name, RNG rng, int NumOfLines, int windowHeight, int windowWidth );
static Scalar randomColor( RNG& rng );

int main( )
{    
    int windowHeight = 480, windowWidth=640;
    Mat image = Mat::zeros( windowHeight, windowWidth, CV_8UC3 );
    namedWindow( "Source", CV_WINDOW_AUTOSIZE );
    int n=1;
    while(1)
    {
    RNG rng(n);
    Drawing_Random_Lines(image, "Source", rng, 5, windowHeight, windowWidth);    
    imshow( "Source", image );
    waitKey(100);
    n++;
    }

    return(0);
}

void Drawing_Random_Lines( Mat image, char* window_name, RNG rng, int NumOfLines, int windowHeight, int windowWidth )
{
    int lineType = 8;
    Point pt1, pt2;

    for( int i = 0; i < NumOfLines; i++ )
    {
        pt1.x = rng.uniform( 0, windowWidth );
        pt1.y = rng.uniform( 0, windowHeight );
        pt2.x = rng.uniform( 0, windowWidth );
        pt2.y = rng.uniform( 0, windowHeight );

        line( image, pt1, pt2, randomColor(rng), rng.uniform(1, 10), 8 );
        imshow( window_name, image );
    }
}

static Scalar randomColor( RNG& rng )
{
    int icolor = (unsigned) rng;
    return Scalar( icolor&255, (icolor>>8)&255, (icolor>>16)&255 );
}
-------------

Example 2: ( Drawing Colorful Random Lines )

-------------
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace cv;
using namespace std;

void Drawing_Random_Lines( Mat image, char* window_name, RNG rng, int NumOfLines, int windowHeight, int windowWidth );
static Scalar randomColor( RNG& rng );

int main( )
{   
    int windowHeight = 480, windowWidth=640;
    Mat image = Mat::zeros( windowHeight, windowWidth, CV_8UC3 );
    namedWindow( "Source", CV_WINDOW_AUTOSIZE );
    int n=1;
    while(1)
    {
    RNG rng(n);
    Drawing_Random_Lines(image, "Source", rng, n, windowHeight, windowWidth);   
    imshow( "Source", image );
    waitKey(100);
    n++;
    }

    return(0);
}

void Drawing_Random_Lines( Mat image, char* window_name, RNG rng, int NumOfLines, int windowHeight, int windowWidth )
{
    int lineType = 8;
    Point pt1, pt2;

    for( int i = 0; i < NumOfLines; i++ )
    {
        pt1.x = rng.uniform( 0, windowWidth );
        pt1.y = rng.uniform( 0, windowHeight );
        pt2.x = rng.uniform( 0, windowWidth );
        pt2.y = rng.uniform( 0, windowHeight );

        line( image, pt1, pt2, randomColor(rng), rng.uniform(1, 10), 8 );
        imshow( window_name, image );
    }
}

static Scalar randomColor( RNG& rng )
{
    int icolor = (unsigned) rng;
    return Scalar( icolor&255, (icolor>>8)&255, (icolor>>16)&255 );
}

-------------

Result:


14 comments:

  1. That may be a noob question, but why didn't we use:

    Drawing_Random_Lines( Mat& image, .....
    instead of
    Drawing_Random_Lines( Mat image, .....

    for the declaration of Drawing_Random_Lines function? Isn't it more efficient?

    ReplyDelete
  2. شركة تنظيف منازل بالخرج
    تختص شركتنا بكافة أعمال التنظيف المنزلية ,والتي قد تتطلب مجهودا بدنيا شاقا قد يعجز أفراد الأسرة عن إنجازه وبشكل احترافي
    https://www.khpeer.com/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D9%86%D8%B8%D9%8A%D9%81-%D9%85%D9%86%D8%A7%D8%B2%D9%84-%D8%A8%D8%A7%D9%84%D8%AE%D8%B1%D8%AC/

    شركة تنظيف مجالس بالخرج
    عمالة مدربة و على أعلى مستوى من الاحترافية يضمن لك الحصول على أفضل النتائج لإرضائك فرضاؤكم هو هدفنا
    https://www.khpeer.com/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D9%86%D8%B8%D9%8A%D9%81-%D9%85%D8%AC%D8%A7%D9%84%D8%B3-%D8%A8%D8%A7%D9%84%D8%AE%D8%B1%D8%AC/

    شركة تنظيف موكيت بالخرج
    تقدم الشركة خدمات تنظيف وبأفضل مستوى للموكيت و السجاد و بأجود أنواع العمالة المدربة وبأسعار تناسب جميع العملاء
    https://www.khpeer.com/%D8%B4%D8%B1%D9%83%D8%A9-%D8%AA%D9%86%D8%B8%D9%8A%D9%81-%D9%85%D9%88%D9%83%D9%8A%D8%AA-%D8%A8%D8%A7%D9%84%D8%AE%D8%B1%D8%AC/

    ReplyDelete
  3. خطة تنظيف المنزل اليومية أولاً وقبل كل شيء: ابدأ في تنظيف جميع الأشياء التي يتم استخدامها بشكل متكرر ومنتظم ، مثل مقابض الأبواب وحوامل المصابيح والأسطح والطاولات ومقاعد الحمام والمفاتيح والأشياء الشخصية المستخدمة بشكل متكرر داخل المنزل وخارجه ، و امسحيهم بالماء النظيف. مطهر قوي مثل الكلور المخفف بالماء.
    شركة ركن الاوائل للخدمات المنزلية

    ReplyDelete
  4. بغض النظر عن تكلفة سيارتك أو قوتها ، فستحتاج قريبًا إلى الإصلاح. لمنع حدوث ذلك ، تحتاج إلى مراقبة العناية الدورية بالسيارات وصيانتها. في الفقرات التالية ، سوف تكتشف نصائح بسيطة لكنها فعالة لصيانة السيارة ستساعدك على توفير المال على المدى الطويل.

    من المهم تغيير الزيت وفقًا لجدول صيانة السيارة الموصى به من الشركة المصنعة. بالنسبة لمعظم السيارات ، يكون هذا كل 6000 كيلومتر أو ثلاث مرات في الشهر ، أيهما يأتي أولاً. يضمن تغيير الزيت أن زيت المحرك نظيف وفي المستويات المناسبة ، مما يحافظ على عمل المحرك بسلاسة.
    امنح المبرد فحصًا سريعًا للتأكد من امتلائه واطلب من ميكانيكي سيارات محترف فحص مستوى التجمد في نظام التبريد. إذا ارتفعت درجة حرارتها ، فقد يؤدي ذلك إلى حدوث أضرار جسيمة كان من الممكن أن تتجنبها ببعض عمليات الصيانة الأساسية لنظام التبريد.
    من الحكمة أن تأخذ سيارتك إلى مركز خدمة سيارات في دبي للفحص الكامل. عند القيام بذلك ، يمكنك أن تطمئن إلى أن جميع أجزاء سيارتك تحظى باهتمام خاص. وبالتالي ، فإن فرص حدوث أعطال ضئيلة.
    اذهب إلى نفس مرآب السيارات في دبي حيث سيلاحظ الميكانيكي أشياء قد لا تكون متعلقة بالسيارة ويمكنه أن يقدم لك نصائح حول العناية بالسيارات وصيانتها والتي قد يفوتها الميكانيكي الذي يراها للمرة الأولى.
    يمكن أن يؤثر الكسل على صحتك وصحة سيارتك. وبالتالي ، من المهم تنظيف سيارتك من الداخل والخارج بانتظام. قد يؤدي ترك الأوساخ والأوساخ على سيارتك إلى إتلافها ، مما يتسبب في بدء تقطيع الطلاء أو تآكل مواد التنجيد. قدر الإمكان ، اركنها أسفل مرآب أو في مرآب لإبقائها جافة ومنع الصدأ.
    لا تنس ضغط الهواء في الإطارات. افحصه بمقياس ضغط واستخدم مضخة لملئه بالمستويات الصحيحة. أفضل وقت للتحقق من ضغط الهواء هو عندما يتغير الطقس حيث تؤثر درجة الحرارة بشكل كبير على ضغط الهواء.
    هل تبحث عن ورشة عمل موثوقة وذات سمعة طيبة تقدم خدمة سيارات كاملة في دبي؟


    صيانة اودي

    صيانة سيارات بورش

    صيانة غياراودي

    ورشة اصلاح سيارات

    ReplyDelete