使用VC++和Open CV。這是我想要做的: 找到前三個近水平的霍夫線並繪製它們。 找到所有近乎垂直的線並畫出它們 如果有任何垂直線是高於水平線那麼標記設置爲0如果上面沒有垂直霍夫線(全部低於)水平線則FLAG = 0 那麼FLAG = 1如何比較Hough Line在OpenCV中的位置?
int n, i,c=0;
int flag = 0;
cvCanny(src, dst, 50, 150, 3);
lines = cvHoughLines2(dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 10, 5, 5);
n = lines->total;
for(i = 0; i < n; i++)
{
CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
CvPoint pt1, pt2, hpt1, hpt2, vpt1, vpt2;
int hy = 0, vy = 0;
pt1 = line[0];
pt2 = line[1];
theta = atan((double)(pt2.y - pt1.y)/(pt2.x - pt1.x)); /*slope of line*/
degree = theta*180/CV_PI;
if(fabs(degree) < 8) //checking for near horizontal line
{
c++;
if(c > 0 && c <5) /*main horizontal lines come first*/
{
cvLine(out, pt1, pt2, CV_RGB(255, 255,255), 1, CV_AA, 0);
hpt1 = line[0];
hpt2 = line[1];
if(hpt1.y > hpt2.y) //finds out lower end-point
hy = hpt1.y;
else
hy = hpt2.y;
}
}
if(fabs(degree) > 70) /*near vertical lines*/
{
cvLine(out, pt1, pt2, CV_RGB(255, 255,255), 1, CV_AA, 0);
vpt1 = line[0];
vpt2 = line[1];
if(vpt1.y > vpt2.y) //finds upper end-pt of vertical line
vy = vpt1.y;
else
vy = vpt2.y;
if(vy >= hy) //if vert line is lower than horizontal line
flag = 1;
else
flag = 0;
}
}
display(out, "hough lines");
return flag;
}
然而,對於一個圖像,即使水平線-still該標誌被返回1。所以我是沿錯誤軸線計數上述檢測到的垂直線?請幫助我。
這是把它的保鮮盒方式,但是我得到在輸出圖像上看到精細的水平和垂直線條。問題是在主水平線上方有垂直線時拋出一個標誌。這沒有發生。 – AruniRC 2011-01-31 02:15:25
在尋找其他錯誤之前,我會首先修復這些顯而易見的錯誤(它在一個映像上工作並不意味着它每次都能正常工作,並且如果它每次都需要解釋原因)。 – etarion 2011-02-01 11:11:22