2017-04-12 8 views
0

공식 5MP 카메라와 함께 Raspberry Pi 2를 사용하고 있습니다. OpenCV 3.2.0을 사용하여 카메라를 보정했습니다. 나는 파이썬 3.4.2에서 코딩하고있다. (나는 최신 버전이 아니라는 것을 알고 있지만 최신 버전을 위해 OpenCV를 다시 컴파일하는 것은 의문의 여지가 없다.)OpenCV Point Undistortion

제 질문은 카메라에 상대적인 정사각형 내에 포인트가 있고 카메라를 기준으로 네 모서리의 모든 네 모서리의 점을 가지고 있습니다 (정사각형이 아닌 것은 회전하고 약간 이동할 수 있기 때문입니다).), 사각형에 상대적인 점을 어떻게 찾을 수 있습니까?

예를 들어, 정사각형의 왼쪽 위 모서리가 (10, 20)이고 원래 점이 오른쪽, 아래쪽 어쩌면 (21, 33) 조금이라면 마지막 점이 무언가 일 수 있습니다 like (15, 18).

이미지의 크기가 조정될 수 있으므로이 결과를 1 모서리로 채우고 (입력 포인트와 모서리를 뺀 것만으로는 충분하지 않습니다.) 이미지가 회전 될 수 있기 때문에 정사각형이 완벽하고 사각형이 아니라고 가정하면 2 개의 반대 구석을 기준으로 충분하지 않습니다. 이론적으로, 카메라를 올바르게 보정하면 (그리고 완벽한 정사각형이나 직사각형을 만들면) 3이면 충분하지만 완전히 확신하는 것이 더 낫습니다.

문제는 이미지의 점을 사각형의 점으로 다시 매핑하는 방법이 아니라는 것입니다. 어떻게해야합니까?

예 (낮은 품질에 대한 죄송) :

Checkerboard Checkerboard with input points: [(163, 17) -> (0, 0), (294, 50) -> (5, 0), (313, 273) -> (5, 8), and (145, 275) -> (0, 8)], output point: (257, 149) -> (3.5, 4)

을 감안할 때 4 개 빨간색 카메라와 출력 점 및 녹색 카메라 점은, 어떻게 녹색 출력 지점을 찾을 수 있습니까?

답변

0

필자는 (필자는 을 작성한 직후에을 작성했음을 맹세한다.) 나는 기능을 수행했다 : cv2.getPerspectiveTransform(). 다음은이 예에서 사용되는 방법입니다.

rows = 5 
columns = 8 
inputs = [(163, 17), (294, 50), (313, 273), (145, 275)] 
outputs = [(0, 0), (5, 0), (5, 8), (0, 8)] 

transform_matrix = cv2.getPerspectiveTransform(inputs, outputs) 

def transform(point): 
    global transform_matrix 
    return cv2.perspectiveTransform(point, transform_matrix)