이미지가 있고 그 안에 일부 모양이 있습니다. 나는 선을 사용하여 선을 탐지했다. 어떤 행이 병렬인지 어떻게 알 수 있습니까? 직교 좌표 선의Python openCV가 평행선을 감지합니다.
7
A
답변
13
식 :
Y = K * X + B
개의 라인 Y = K1 * X + B1, Y = K2 * X + B2있다 평행 K1 경우 = k2.
그래서 각 감지 된 라인에 대해 계수 k를 계산해야합니다. 위해
에 고유 당신이 두 점 라인에 속하는의 좌표를 알 필요가 줄의 방정식을 식별합니다.
HoughLines (С ++) 발견 라인을 갖는 후 :
vector<Vec2f> lines;
HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0);
는 극 좌표 검출 라인의 파라미터 (R, 세타)를 저장하는 벡터 라인을 가지고있다. 당신은 직교 좌표를 전송해야합니다 : C++에서
다음예 : 줄이 두 지점을 가지고 한
for(size_t i = 0; i < lines.size(); i++)
{
float rho = lines[i][0], theta = lines[i][1];
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000*(-b)); //the first point
pt1.y = cvRound(y0 + 1000*(a)); //the first point
pt2.x = cvRound(x0 - 1000*(-b)); //the second point
pt2.y = cvRound(y0 - 1000*(a)); //the second point
}
후에는 그 방정식을 계산할 수 있습니다.
1
HoughLines는 결과를 극좌표로 반환합니다. 따라서 각도의 두 번째 값을 확인하십시오. 태그에 명시된 바와 같이이이 파이썬에서 수행하는 경우 필요 당신이 houghspace 출력 이미지를 제공 houghlines의 scipy 버전을 사용할 수 있습니다, Y, X로
def findparallel(lines):
lines1 = []
for i in range(len(lines)):
for j in range(len(lines)):
if (i == j):continue
if (abs(lines[i][1] - lines[j][1]) == 0):
#You've found a parallel line!
lines1.append((i,j))
return lines1
변환 없음 :] 여기를 참조하십시오 (HTTP ://scikit-image.org/docs/dev/auto_examples/plot_line_hough_transform.html). 그런 다음 theta가 이제 종속 축이되도록 독립 축 (theta 또는 'X')과 종속 축 (rho 또는 'Y')을 반전시킬 수 있습니다. 이 Hough 공간 이미지를 임계화한 후 (가장 가능성있는 선에 해당하는 (ρ, theta)의 가장 강렬한 부분을 얻으려면) 데이터에 수평선을 맞출 수 있습니다. theta = constant (y = mx + b, 기울기 없음). – chase