2013-08-03 70 views
0

我正在使用C API開發OpenCV應用程序。我試圖讓我的cvLine函數具有隨機厚度,因此第一次繪製它的厚度將爲3,第二次可能爲10.現在,每次繪製它時厚度都是均勻的。我嘗試過實施cvRandInt,但即使通過研究,我也無法理解如何使用此功能。隨機線條粗細-OpenCv

CvRNG rng; 

int thickness=cvRandInt(&rng); 


IplImage* imgScribble = NULL; 

while(true) 
    { 

     IplImage *frame=0; 
     frame=cvQueryFrame(capture); 
      if(!frame) break; 


     if(imgScribble == NULL) 
      { 


    imgScribble = cvCreateImage(cvGetSize(frame), 8, 3); 

      } 



// Holds the yellow thresholded image 

    IplImage* imgYellowThresh1 = GetThresholdedImage1(frame,1); 
    double moment10 = cvGetSpatialMoment(moments_yellow, 1, 0); 
    double moment01 = cvGetSpatialMoment(moments_yellow, 0, 1); 
    double area = cvGetCentralMoment(moments_yellow, 0, 0); 
    int lastX = posX; 
    int lastY = posY; 
    posX = moment10/area; 
    posY = moment01/area; 

       if(lastX>0 && lastY>0 && posX>0 && posY>0) 

        { 

      cvLine(imgScribble, cvPoint(posX, posY), cvPoint(lastX, lastY), cvScalar(10,255,255), thickness,CV_AA, 0);     

        } 

回答

2

我認爲這應該工作:

//---------------------------------------------------------------------------------------------- 
// MAIN 
//---------------------------------------------------------------------------------------------- 
int main(int argc, char** argv) 
{ 
    int MaxThickness=10; 
    CvRNG rng = cvRNG(0xffffffff); 
    // CvRNG rng(time(NULL)); 
    cvNamedWindow("img"); 
    IplImage* img=cvCreateImage(cvSize(800,600), 8, 3); 

    int MaxThikness=10; 

    int k=0; 
    while(k!=27) 
    { 
     int thickness=cvRandInt(&rng)%MaxThikness; 
     //cout << thickness << endl; 
     cvSet(img,cvScalar(255,0,0)); 
     cvLine(img,cvPoint(50,50),cvPoint(0,0),cvScalar(100,255,255),thickness);   
     cvShowImage("img",img); 
     k=cvWaitKey(500); 
    } 
    return 0; 
} 

併爲您的片段(我不能測試它,因爲它是不完整)。

CvRNG rng = cvRNG(0xffffffff); 
int MaxThikness=10; 
int thickness=0; 
IplImage* imgScribble = NULL; 
IplImage *frame = NULL; 
IplImage* imgYellowThresh1=NULL; 
while(true) 
    {   
     frame=cvQueryFrame(capture); 
      if(!frame) break; 
     if(imgScribble == NULL) 
      { 
    imgScribble = cvCreateImage(cvGetSize(frame), 8, 3); 
      } 

// Holds the yellow thresholded image 

    imgYellowThresh1 = GetThresholdedImage1(frame,1); 
    double moment10 = cvGetSpatialMoment(moments_yellow, 1, 0); 
    double moment01 = cvGetSpatialMoment(moments_yellow, 0, 1); 
    double area = cvGetCentralMoment(moments_yellow, 0, 0); 
    int lastX = posX; 
    int lastY = posY; 
    posX = moment10/area; 
    posY = moment01/area; 

    thickness=cvRandInt(&rng)%MaxThikness; 
    if(lastX>0 && lastY>0 && posX>0 && posY>0) 
        { 
      cvLine(imgScribble, cvPoint(posX, posY), cvPoint(lastX, lastY), cvScalar(10,255,255), thickness,CV_AA, 0);     
        } 
+0

好像線僅在我已經更新上述代碼中,我已測試,它很好地工作的最大數目 – user2645586

+1

繪製的厚度。 –

+0

謝謝安德烈。隨機代碼的作品,但我使用的顏色跟蹤代碼在這個循環內混淆,不再追蹤顏色。有任何想法嗎? – user2645586