ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OpenCV Python] 관점 변환 구현해보기
    프로그래밍/OpenCV 2022. 1. 1. 16:10
    반응형

     

    안녕하세요 오늘은 관점변환(perspective transformation)에

    대해 알아보고 구현해 볼려고 합니다.

    관점 변환은 화면에 잡힌 물체를 기하학적 변환을 통해 형태를 변형하는 것입니다.

     

    형태를 변형하여 가우시안블러 또는 캐닛 엣지를 사용하여 

    물체의 내용이 무엇이 있는지 아니면

    가장자리 검출하기 좋게 변경을 할 수 있습니다.

     

    제가 구현해본 관점 변환인데요. 클릭의 포인트를 담아서 

    그 객체의 포인트로 관점변환을 해본것입니다.

    이렇게 관점변환을 하여 ROI를 정하고 그 ROI  안에 

    캐닛 엣지 들을 사용하면 가장자리 검출이 더 편리 하겠죠??

     

    소스는 아래에 설명을 같이 적어 놓았습니다.

    import cv2
    import numpy as np
    
    # 포인트 배열 생성
    points = np.zeros((4, 2), np.int)
    # 포인트 갯수 카운터
    point_Counter = 0
    # 폰트 생성
    font = cv2.FONT_HERSHEY_SIMPLEX
    
    #마우스 콜백 함수
    def mousePoints(e, x, y , flags, params):
        global point_Counter
        #마우스 오른쪽버튼 클릭 시 (클릭해서 땔 때 아님)
        if e == cv2.EVENT_LBUTTONDOWN:
            #포인트 정의
            points[point_Counter] = x, y
            point_Counter = point_Counter + 1
            print(points)
    
    
    def main():
        global point_Counter
        color_img = cv2.imread("targetImg.jpg", cv2.IMREAD_COLOR)
    
        while True:
            if point_Counter == 4:
                width, height = 450, 350
                pts1 = np.array([points[0], points[1], points[2], points[3]], dtype= np.float32)
                pts2 = np.array([[0, 0], [width, 0], [0, height], [width, height]],  dtype= np.float32)
                #관점 변환 정의(관점 변환 객체 생성)
                m = cv2.getPerspectiveTransform(pts1, pts2)
                # 관점 변환 적용
                imgOutput = cv2.warpPerspective(color_img, m, (width, height))
                cv2.imshow("output image", imgOutput)
                if cv2.waitKey(1) & 0xFF == 32:
                    break
    
            for x in range (0,4):
                cv2.circle(color_img,(points[x][0], points[x][1]),3,(0,255,0),cv2.FILLED)
    
            cv2.imshow("point image", color_img)
            cv2.setMouseCallback("point image", mousePoints)
            cv2.waitKey(1)
    
    if __name__ == '__main__':
        main()

     

    전체 소스코드를 확인 하실려면 제 깃헙인 https://github.com/hyunseokjoo/detecting_click_on_image로 오셔서 확인 부탁드립니다.

     

    반응형

    댓글

Designed by Tistory.