可以任何一个解释我的逻辑背后的代码??逻辑后面的代码
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
可以任何一个解释我的逻辑背后的代码??逻辑后面的代码
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
它看起来像a
和b
是被用来在一个方向(向内或向外),并在相反的方向移动pt2
pt1
阈值。
也许他们正在用来增加/减少边界检查的矩形区域?
他们将它改为笛卡尔,然后他们添加了* 1000,类似的东西,行 (i = 0; i < MIN(lines-> total,100); i ++) float * line =(float *)cvGetSeqElem(lines,i); float rho = line [0]; float theta = line [1]; CvPoint pt1,pt2; double a = cos(theta),b = sin(theta); double x0 = a * rho,y0 = b * rho; pt1.x = cvRound(x0 + 1000 *( - b)); pt1.y = cvRound(y0 + 1000 *(a)); pt2.x = cvRound(x0-1000 *( - b)); pt2.y = cvRound(y0 - 1000 *(a)); } – paddu 2010-07-08 15:44:56
您有一个由x0, y0
定义的点。您现在正在创建另外两个点对象,一个位于(-b*1000, a*1000)
,另一个位于相对于原始点的(b*1000, -a*1000)
。据推测,1000
是为了解决规模问题,因为值a
和b
与点x0, y0
的点不同。
嗨,谢谢,它来自hough行opencv代码,你能解释清楚吗 – paddu 2010-07-08 15:40:15
他们改变它为笛卡尔,然后他们增加了一个* 1000,像这样的东西,行数(i = 0; i < MIN(lines-> total,100 ); i ++){float * line =(float *)cvGetSeqElem(lines,i); float rho = line [0]; float theta = line [1]; CvPoint pt1,pt2;双a = cos(theta),b = sin(theta); double x0 = a * rho,y0 = b * rho; pt1.x = cvRound(x0 + 1000 *( - b)); pt1.y = cvRound(y0 + 1000 *(a)); pt2.x = cvRound(x0 - 1000 *( - b)); pt2.y = cvRound(y0 - 1000 *(a)); } – paddu 2010-07-08 15:45:32
请帮我理清代码背后的逻辑 – paddu 2010-07-08 15:46:42
如果您将代码格式化为代码,我们将能够更好地为您提供帮助。找出问题和答案页上文本框上方的小图标是什么,它们将丰富你的生活。 – 2010-07-08 15:19:14