ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OpenCV 강좌 C++ & Python - 타원을 그리는 ellipse 함수 사용법
    OpenCV/OpenCV C++&Python 강좌 2019. 8. 11. 14:48



    OpenCV의 타원을 그리는 ellipse를 C++과 Python에서 사용하는 방법을 설명합니다.


    2015.  1. 2 - 최초 작성

    2018.  7. 16

    2019.  7. 17

    2019.  8. 11 - C++ 코드 추가 




    ellipse 함수는 다음과 같은 파라미터를 가집니다. 


        cv.ellipse(       img,       타원이 그려질 이미지 

                         center,        중심 좌표(x, y)

                           axes,        메인 축 방향의 반지름

                          angle,        회전각

                     startAngle,        호의 시작각도

                       endAngle,        호의 끝각도

                          color,        타원의 색( B, G, R )

                      thickness,        선굵기(디폴트값 1), -1이면 내부가 채워집니다.

                       lineType,        디폴트값 cv.LINE_8(=8-connected line)

                          shift )       디폴트값 0




    첫번째 예제입니다. 




    Python


    import numpy as np
    import cv2 as cv


    # 컬러 이미지를 저장할 넘파이 배열을 생성합니다.
    width = 500
    height = 500
    bpp = 3

    img = np.zeros((height, width, bpp), np.uint8)


    center = (int(height/2), int(width/2))


    # center를 중심으로 하는 3개의 원을 그립니다.

    # x축 방향 반지름 길이 200, y축 방향 반지름 길이 10인 파란색 타원을 그립니다.  
    cv.ellipse(img, center, (200, 10), 0, 0, 360, (255, 0, 0), 3 )
    # x축 방향 반지름 길이 10, y축 방향 반지름 길이 200인 녹색 타원을 그립니다.
    cv.ellipse(img, center, (10, 200), 0, 0, 360, (0, 255, 0), 3
    # x축 방향 반지름 길이 200, y축 방향 반지름 길이 200인 빨간색 타원을 그립니다.
    # 반지름 200인 원이 그려집니다. 
    cv.ellipse(img, center, (200, 200), 0, 0, 360, (0, 0, 255), 3 )


    cv.imshow("result", img)
    cv.waitKey(0);



    C++


    #include <opencv2/opencv.hpp>


    using namespace cv;


    int main()
    {
    // 컬러 이미지를 저장할 Mat 개체를 생성합니다.
    int width = 500;
    int height = 500;

    Mat img(height, width, CV_8UC3, Scalar(0, 0, 0));


    Point center(int(height/2), int(width/2));


    // center를 중심으로 하는 3개의 원을 그립니다.
    // x축 방향 반지름 길이 200, y축 방향 반지름 길이 10인 파란색 타원을 그립니다.  
    ellipse(img, center, Size(200, 10), 0, 0, 360, Scalar(255, 0, 0), 3 );
    // x축 방향 반지름 길이 10, y축 방향 반지름 길이 200인 녹색 타원을 그립니다.
    ellipse(img, center, Size(10, 200), 0, 0, 360, Scalar(0, 255, 0), 3 );
    // x축 방향 반지름 길이 200, y축 방향 반지름 길이 200인 빨간색 타원을 그립니다.
    // 반지름 200인 원이 그려집니다. 
    ellipse(img, center, Size(200, 200), 0, 0, 360, Scalar(0, 0, 255), 3 );


    imshow("result", img);
    waitKey(0);

    return 0;
    }




    두번째 예제입니다. 




    Python


    import numpy as np
    import cv2 as cv


    # 컬러 이미지를 저장할 넘파이 배열을 생성합니다.
    width = 500
    height = 500
    bpp = 3

    img = np.zeros((height, width, bpp), np.uint8)


    center = (int(height/2), int(width/2))


    # center를 중심으로 하는 3개의 원을 그립니다.

    # x축 방향 반지름 길이 10, y축 방향 반지름 길이 200인 녹색 타원을 그립니다.
    # 수직선에 가까운 타원이 그려집니다.
    cv.ellipse(img, center, (10, 200), 0, 0, 360, (0, 255, 0), 3

    # 타원을 시계방향으로 45도 회전하여 그립니다.
    cv.ellipse(img, center, (10, 200), 45, 0, 360,  (0, 0, 255), 3 )

    # 타원을 반시계방향으로 45도 회전하여 그립니다. 
    cv.ellipse(img, center, (10, 200), -45, 0, 360,  (255, 0, 0), 3 )


    cv.imshow("result", img)
    cv.waitKey(0);




    C++



    #include <opencv2/opencv.hpp>


    using namespace cv;


    int main()
    {
    // 컬러 이미지를 저장할 Mat 개체를 생성합니다.
    int width = 500;
    int height = 500;

    Mat img(height, width, CV_8UC3, Scalar(0, 0, 0));


    Point center(int(height/2), int(width/2));


    // center를 중심으로 하는 3개의 원을 그립니다.
    // x축 방향 반지름 길이 10, y축 방향 반지름 길이 200인 녹색 타원을 그립니다. // 수직선에 가까운 타원이 그려집니다.
    ellipse(img, center, Size(10, 200), 0, 0, 360, Scalar(0, 255, 0), 3 );

    // 타원을 시계방향으로 45도 회전하여 그립니다.
    ellipse(img, center, Size(10, 200), 45, 0, 360,  Scalar(0, 0, 255), 3 );

    // 타원을 반시계방향으로 45도 회전하여 그립니다. 
    ellipse(img, center, Size(10, 200), -45, 0, 360,  Scalar(255, 0, 0), 3 );


    imshow("result", img);
    waitKey(0);

    return 0;
    }




    세번째 예제입니다.  0도의 위치에 주의하세요. 




    Python


    import numpy as np
    import cv2 as cv


    # 컬러 이미지를 저장할 넘파이 배열을 생성합니다.
    width = 500
    height = 500
    bpp = 3

    img = np.zeros((height, width, bpp), np.uint8)


    center = (int(height/2), int(width/2))


    # 타원을 시계방향으로 0도에서 90도까지만 그립니다. 
    cv.ellipse(img, center, (100, 100), 0, 0, 90,  (0, 0, 255), 3 )


    cv.imshow("result", img)
    cv.waitKey(0);



    C++


    #include <opencv2/opencv.hpp>


    using namespace cv;


    int main()
    {
    // 컬러 이미지를 저장할 Mat 개체를 생성합니다.
    int width = 500;
    int height = 500;

    Mat img(height, width, CV_8UC3, Scalar(0, 0, 0));


    Point center(int(height/2), int(width/2));


    // 타원을 시계방향으로 0도에서 90도까지만 그립니다. 
    ellipse(img, center, Size(100, 100), 0, 0, 90,  Scalar(0, 0, 255), 3 );


    imshow("result", img);
    waitKey(0);

    return 0;
    }




    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구독하기


    댓글 0

Designed by Tistory.