随机线厚度-OpenCv
我正在使用C API开发一个OpenCV应用程序。我试图让我的随机线厚度-OpenCv,c,opencv,C,Opencv,我正在使用C API开发一个OpenCV应用程序。我试图让我的cvLine函数具有随机厚度,因此它第一次绘制时的厚度为3,第二次可能为10。现在,它每次绘制的厚度都是一样的。我曾尝试实现cvRandInt,但即使通过研究,我也无法理解如何使用此函数 CvRNG rng; int thickness=cvRandInt(&rng); IplImage* imgScribble = NULL; while(true ) { IplImage *fram
cvLine
函数具有随机厚度,因此它第一次绘制时的厚度为3,第二次可能为10。现在,它每次绘制的厚度都是一样的。我曾尝试实现cvRandInt
,但即使通过研究,我也无法理解如何使用此函数
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);
}
我认为这应该奏效:
//----------------------------------------------------------------------------------------------
// 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;
}
这条线似乎只画了最大数量的厚度。我已经更新了上面的代码,我已经测试过了,效果很好。谢谢Andrey。随机代码可以工作,但是我使用的颜色跟踪代码在这个循环中变得混乱,不再跟踪颜色。有什么想法吗?你能展示一下你试图结合这段代码的代码框架吗?我已经在我的答案中添加了代码。我不能测试这个片段,因为这个片段中定义/使用了一些变量,但我认为它应该可以工作。它将在每个周期改变厚度。
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);
}