VC++ 및 Open CV 사용. 여기 내가하고자하는 일이 있습니다 : 처음 세 개의 거의 수평 인 선을 찾아서 그립니다. 모든 수직 라인을 찾아 그 라인을 그려 위의 수평 라인이 인 경우 FLAG가 0으로 설정됩니다. 수평 라인이없는 경우 (모두 아래에있는 경우) FLAG = 수직선 플래그 그래서 잘못 축을 따라 계산하고 1을 반환 아직도 수평선 위에서 검출되는 경우에도 화상에 대한 단 1OpenCV에서 Hough Line 위치를 비교하는 방법은 무엇입니까?
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;
}
? 제발 도와주세요.
을 받고 있어요 출력 이미지에서 수평선과 수직선을 잘 볼 수 있습니다. 문제는 주 수평선 위에 수직선이있을 때 깃발을 던지라는 것입니다. 그것은 일어나지 않습니다. – AruniRC
다른 버그를 검색하기 전에 명백한 버그를 먼저 해결할 것입니다 (한 이미지에서 작동한다고해서 항상 작동한다는 의미는 아니며 매번 작동하는 경우 이유를 설명해야 함). – etarion
다시 한 번 감사드립니다. 우리는 정말 내 부분에서 오류를 돋보이게하고 나는 그들을 지적 해 주셔서 감사합니다. 나는 그것들을 고쳐서 이것으로 돌아갈 것이다. 그리고 대답을 받아 들인다. 언젠가는 혼자 일하는 함정과 너무 많은 프로젝트에 함정이 있습니다. 시간이 없어서 미안해. – AruniRC