Использование VC++ и Open CV. Вот что я пытаюсь сделать: найти первые три почти горизонтальные линии hough и нарисовать их. найти все почти вертикальные линии и нарисовать их , если какая-либо вертикальная линия выше горизонтальная линия, тогда FLAG устанавливается на 0 , если нет вертикальной линии Hough выше (все ниже) горизонтальной линии, затем 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
Я бы исправил очевидные ошибки сначала (что он работает над одним изображением не означает, что он работает каждый раз, и если он работает каждый раз, когда вам нужно объяснять, почему), прежде чем искать другие ошибки. – etarion
еще раз спасибо. Те, кого мы действительно бросаем в глаза, с моей стороны, и я ценю, что вы указываете их. Я исправлю их и вернусь к этому - и затем примите ответ. Может потребоваться некоторое время: ловушки работы в одиночку и слишком много проектов. Извините за промежутки времени. – AruniRC