printf("ho_tari\n");

ep.35 OpenCV1 본문

두산 로보틱스 부트캠프 ROKEY/Computer Vision 교육

ep.35 OpenCV1

호타리 2024. 8. 26. 09:35

2024.8.26

 

영상처리(Image Processing)

  • 입력 받은 영상을 사용 목적에 맞게 적절하게 처리하여 보다 개선된 영상을 생성하는 것
  • 입력 영상에 있는 잡음(noise) 제거, 영상의 대비(contrast) 개선, 관심영역(region of interest) 강조, 영역 분할(segmentation), 압축 및 저장 등
  • 저수준 영상 처리(좁은 의미의 영상 처리)
    • 영상 획득
    • 영상 향상
    • 영상 복원
    • 변환 처리
    • 영상 압축
  • 고수준 영상 처리(컴퓨터 비전)
    • 영상 분할
    • 영상 표현
    • 영상 인식
 

영상 처리의 역사

  • 영상 처리의 시작
    • 1920년대 초반 런던과 뉴욕 간에 해저 케이블을 통한 신문사들이 사진 전송
  • 본격적인 영상 처리 위한 기술
    • 1940년대 폰 노이만의 디지털 컴퓨터의 개념 시작
    • 1950년 이후 트랜지스터, IC, 마이크로프로세서 같은 하드웨어 발달
    • 1950~60년대 프로그램의 언어의 발달과 운영체제 등의 소프트웨어 기술 발달
  • 본격적인 영상 처리 시작
    • 우주 탐사 계획인 아폴로 계획과도 관련, 우주선에서 보낸 훼손된 영상의 복원 연구
  • 1970년대 영상 처리 분야 더욱 발전
    • CT, MRI 등의 의료 분야
    • 원격 자원 탐사, 우주 항공 관련 분야
  • 1990년대 컴퓨터 비전과 응용 분야 급속히 확장
    • 인터넷 시대에 영상검색, 영상전송, 영상광고
    • 디지털 방송 관련 컴퓨터 그래픽스, 디지털 카메라 보급
 

영상 처리 응용 분야


컴퓨터 비전 처리 단계

  • 전처리 단계
    • 주로 영상처리 기술 사용
    • 다양한 특징 추출 : 에지(edge), 선분, 영역, SIFT(Scale-Invariant Feature Transform) 등
  • 고수준 처리
    • 특징정보를 사용하여 영상을 해석, 분류, 상황묘사 등 정보 생성
 

화소(pixel, 畵素)

  • 디지털 영상을 표현하는 2차원 배열에서 각 원소
  • 해당 위치에서 빛의 세기에 대응하는 값
    • 0은 검은색을 나타내고, 화소값이 커질수록 밝은 색
  • 컬러 영상
    • R(red), G(green), B(blue) 세 가지 색상에 대한 정보 화소 정보 표현
    • 2차원 행렬 3개로 표현
  • 화소를 처리하는 것이 영상 처리의 시작
 

이미지와 색공간

    • 색: 빛에서 주파수(파장)의 차이에 따라 다르게 느껴지는 색상
    • 가시광선: 전자기파 중에서 인간이 인지할 수 있는 약 380nm~780nm 사이의 파장

이미지 파일 형식

  • BMP
    • 픽셀 데이터를 압축하지 않은 상태로 저장
    • 파일 구조 간단하지만 용량이 매우 큼
  • JPG(JPEG)
    • 손실 압축(lossy compression) 사용
    • 원본 영상으로부터 픽셀값이 미세하게 달라짐
    • 파일 용량 크기가 크게 감소하는 점에서 장점
    • 디지털 카메라
  • GIF
    • 무손실 압축(losses compression)
    • 움직이는 그림인 Animation GIF 지원
    • 256 이하의 색상을 가진 영상만을 저장하고, 화질이 매우 떨어짐
  • PNG
    • Portable Network Graphics
    • 무손실 압축 사용
    • 용량은 큰 편이지만 픽셀값이 변경되지 않음
    • α 채널을 지원하여 일부분을 투명하게 설정 가능
 

OpenCV

    • 실시간 컴퓨터 비전을 목적으로 인텔(Intel)에서 개발
    • 실시간 이미지 프로세싱에 중점을 둔 한 프로그래밍 라이브러리
    • TensorFlow, PyTorch 및 Caffe의 딥러닝 프레임워크 지원
    • [이미지 출처] https://ko.wikipedia.org/wiki/OpenCV

 

2.1.1 이미지 읽기

 

cv2.imread(filename, flags=cv2.IMREAD_COLOR)

  • filename:
    • 읽어올 이미지 파일의 경로를 문자열로 지정.
    • 파일 경로는 절대 경로나 상대 경로 모두 사용.
  • flag
    • cv2.IMREAD_COLOR (1) : 이미지 파일을 Color로 읽어들이고, 투명한 부분은 무시되며, Default 값
    • cv2.IMREAD_GRAYSCALE (0) : 이미지를 Grayscale로 읽음. 실제 이미지 처리시 중간단계로 많이 사용
    • cv2.IMREAD_UNCHANGED (-1) : 이미지 파일을 alpha channel (투명도)까지 포함하여 읽어 들임
  • 반환값
    • 이미지 배열 (NumPy 배열 형식): 파일에서 읽은 이미지 데이터가 담긴 NumPy 배열 반환. .
  • (주의) cv2.imread()는 잘못된 경로로 읽어도 NoneType으로 들어갈 뿐, 오류를 발생하지 않음
 

cv2_imshow(img)

  • img:
    • 출력할 이미지 데이터가 담긴 NumPy 배열.
  • cv2.imshow()와 비슷한 기능을 하지만, Jupyter Notebook 환경에서 사용하기 위해 특별히 설계된 함수
    • cv2.imshow() 함수가 Jupyter Notebook에서 제대로 작동하지 않는 문제를 해결하기 위해 OpenCV와 Google Colab에서 제공하는 함수.
  • from google.colab.patches import cv2_imshow

 

from google.colab.patches import cv2_imshow

 

cv2.imshow(winname, img)

  • winname:
    • 문자열로, 이미지를 표시할 창의 이름 지정
    • 이 이름은 창의 제목 표시줄에 표시되며, 여러 개의 이미지를 출력할 때 각 창을 구별하기 위해 사용됨.
  • img:
    • 출력할 이미지 데이터가 담긴 NumPy 배열
    • OpenCV로 읽거나 처리한 이미지 데이터를 포함.
    • BGR 형식의 이미지 표시
  • 기능 설명
    • cv2.imshow는 지정된 이름의 창을 생성하고, 해당 창에 이미지 표시
    • 이미지 처리 작업 후 결과를 시각적으로 확인할 때 사용
    • 이미지를 표시한 후, 창이 바로 닫히지 않도록 cv2.waitKey(0)(무한대기) 함수와 함께 사용.

cv2.waitKey(delay)

  • delay:
    • 키 입력을 기다리는 시간(밀리초 단위)을 나타내는 정수.
      • 0: 무한정 키 입력을 기다림.
        • 사용자가 키를 누를 때까지 대기합니다.
      • 양의 정수: 지정된 시간(밀리초) 동안 키 입력을 기다림.
        • 예를 들어, delay=1000으로 설정하면 1초 동안 대기한 후 다음 코드로 넘어감.
  • 반환값
    • 정수 값: 사용자가 누른 키의 ASCII 코드 값 반환
    • 대기 시간 동안 키가 눌리지 않으면 -1 반환
    • 특정 키 입력에 따라 동작 다르게 설정 가능
  • 기능 설명
    • 이미지 창 유지:
      • cv2.imshow()로 이미지를 표시한 후, cv2.waitKey()를 호출하지 않으면 프로그램이 즉시 종료되고 이미지 창이 닫힘.
      • 이를 방지하기 위해 cv2.waitKey()를 사용해 창이 일정 시간 동안 또는 키 입력이 있을 때까지 유지되도록 함.
    • 동영상 프레임 제어:
      • 동영상을 처리할 때 각 프레임 사이에 일정한 지연을 주어 재생 속도 조절
        • 예를 들어, delay=30으로 설정하면 약 30 FPS의 속도로 동영상 재생
 

 

cv2.destroyAllWindows()

  • 기능 설명
    • 모든 창 닫기: 이 함수는 현재 열려 있는 모든 OpenCV 창 닫음.
    • OpenCV에서는 여러 개의 창을 동시에 열 수 있는데, 이 함수는 그 모든 창을 한 번에 종료
    • 자원 해제: 창을 닫으면서 시스템에서 사용하고 있던 자원도 해제됨.
      • 따라서, 프로그램이 종료될 때 메모리 누수를 방지하는 데 도움을 줌.
  • 특정 창만 닫기:
    • cv2.destroyWindow(winname) 함수 사용하여 해당 이름의 창만 닫을 수 있음.

2.1.2 이미지 저장하기

 

 

cv2.imwrite(filename, img, [params])

  • filename:
    • 저장할 이미지 파일의 경로를 문자열로 지정.
    • 파일 경로는 절대 경로나 상대 경로 모두 사용.
  • img
    • 저장할 이미지.
    • NumPy 배열로 표현
  • params
    • 이미지 저장 시 사용할 추가적인 매개변수.
    • 리스트 형식으로 전달되며, 이미지 형식에 따라 다르게 사용됨.
      • 압축률이나 품질 지정
    • cv2.IMWRITE_JPEG_QUALITY : JPEG 파일 품질 설정
      • 값 : 0에서 100, 기본값 95
      • 값이 클수록 이미지 품질이 높아지고 파일 크기 커짐.
    • cv2.IMWRITE_PNG_COMPRESSION : PNG 파일 압축 수준 설정
      • 값 : 0에서 9, 기본값 3
      • 값이 클수록 압축이 강해져서 파일 크기가 줄어들지만, 저장 속도가 느려짐.
    • cv2.IMWRITE_WEBP_QUALITY : WebP 파일 품질 설정
      • 값 : 1에서 100, 기본값 100
  • 반환값
    • True or False: 이미지 파일이 성공적으로 저장되면 True, 실패하면 False 반환.
    • 파일 저장이 실패하는 경우는 주로 경로가 잘못되었거나 디스크 용량이 부족한 경우임

2.1.3 동영상 및 카메라 프레임 읽기

 

 

cv2.VideoCapture(source, apiPreference)

  • 기능 설명
    • OpenCV에서 비디오 파일을 읽거나, 웹캠과 같은 비디오 장치로부터 실시간 영상을 캡처하기 위해 사용되는 클래스입니다. 이 클래스는 비디오 데이터를 프레임 단위로 처리할 수 있도록 도와줍니다.
  • source:
    • 비디오 파일 경로: 읽고자 하는 비디오 파일의 경로를 문자열로 지정
      • 예를 들어, "video.mp4" 같은 파일명을 넣으면 해당 비디오 파일을 열 수 있음.
    • 카메라 장치 인덱스: 숫자로 지정된 인덱스를 통해 연결된 카메라 선택
      • 0은 기본 웹캠을, 1은 두 번째 연결된 카메라
  • apiPreference (선택 사항):
    • 특정 비디오 캡처 API를 사용할 때 선택적으로 지정할 수 있는 매개변수.
      • cv2.CAP_DSHOW는 DirectShow(Windows)를 사용
      • cv2.CAP_V4L2는 Video4Linux2(Linux)를 사용
  • 주요 메서드
    • open() : 비디오 파일이나 카메라 장치를 열기 위해 사용.
      • 생성자에서 이미 열었기 때문에 일반적으로 필요하지 않지만, VideoCapture 객체를 재사용할 경우 유용합니다.
    • isOpened() : 비디오 파일이나 카메라가 정상적으로 열렸는지 확인하는 메서드.
      • True를 반환하면 성공적으로 열렸다는 의미.
    • read() : 비디오의 다음 프레임을 읽어옴. 이 메서드는 두 개의 값을 반환함:
      • ret: 프레임을 성공적으로 읽으면 True, 실패하면 False 반환.
      • frame: 읽어들인 프레임을 반환. 만약 읽기에 실패하면 None 반환.
    • release() : 비디오 파일이나 카메라 장치를 닫고 자원 해제함.
      • 작업이 끝나면 반드시 호출해야 합니다.
    • set(propId, value) : 비디오 캡처 속성을 설정하는 메서드.
      • 예를 들어, 해상도, 프레임 속도 등을 설정
    • get(propId) : 비디오 캡처 속성을 가져오는 메서드.
      • 예를 들어, 현재 프레임 위치, 해상도 등을 가져올 수 있음.

 

2.1.6 카메라 비디오 속성 제어

2.2 그림 그리기

2.2.1 직선 그리기

 

 

cv2.line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

  • 기능 설명
    • 이미지 위에 선을 그릴 때 사용하는 함수
    • 이 함수는 두 점을 연결하는 선을 이미지 위에 그려주는 역할
    • 주로 이미지에 도형을 그리거나, 특정 객체를 강조할 때 사용됨.
  • 매개변수
    • img:
      • 선을 그릴 이미지. 이 이미지는 NumPy 배열 형태로 제공됨.
    • pt1:
      • 선의 시작점 좌표를 나타내는 튜플 (x, y) 형식.
    • pt2:
      • 선의 끝점 좌표를 나타내는 튜플 (x, y) 형식.
    • color:
      • 선의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 선의 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.

2.2.2 사각형 그리기

 

 

cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

  • 기능 설명
    • 이미지 위에 직사각형을 그릴 때 사용하는 함수
    • 이 함수는 두 점을 연결하는 사각형을 이미지 위에 그려주는 역할
    • 주로 객체 감지 결과를 시각적으로 표시하거나, 특정 객체를 강조할 때 사용됨.
  • 매개변수
    • img:
      • 직사각형을 그릴 이미지. 이 이미지는 NumPy 배열 형태로 제공됨.
    • pt1:
      • 직사각형의 왼쪽 위 모서리 좌표를 나타내는 튜플 (x, y) 형식.
    • pt2:
      • 직사각형의 오른쪽 아래 모서리 좌표를 나타내는 튜플 (x, y) 형식.
    • color:
      • 직사각형의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 직사각형의 테두리 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 직사각형이 그려진 이미지를 직접 수정합니다.

2.2.3 다각형 그리기

 

 

 

cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)

  • 기능 설명
    • 이미지 위에 여러 개의 점들을 연결하여 폴리라인(다각형의 경계선)을 그릴 때 사용하는 함수
    • 이 함수는 이미지 위에 닫힌 또는 열린 다각형을 그리는 데 유용하며, 다양한 도형을 그려주는 역할
    • 주로 객체의 윤곽선을 강조하거나 복잡한 다각형 모양을 그릴 때 사용됨.
  • 매개변수
    • img:
      • 다각형을 그릴 이미지. 이 이미지는 NumPy 배열 형태로 제공됨.
    • pts:
      • 다각형의 꼭짓점 좌표를 담은 리스트
      • 이 리스트는 Numpy 배열로 표현
      • 배열의 형태는 (number_of_points, 1, 2). 각 점은 (x, y) 형식의 좌표.
    • isClosed:
      • 폴리라인의 마지막 점과 첫 번째 점을 연결하여 닫힌 다각형을 만들지 여부를 결정하는 Boolean 값
      • True로 설정하면 폴리라인이 닫힌 다각형이 되고, False로 설정하면 열린 폴리라이됨.
    • color:
      • 폴리라인의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 폴리라인의 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.

2.2.4 원, 타원, 호 그리기

 

cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)

  • 기능 설명
    • 이미지 위에 원(circle)을 그릴 때 사용하는 함수
    • 이 함수는 중심 좌표와 반지름을 지정하여 이미지 위에 원을 그려주는 역할
    • 주로 객체의 중심을 표시하거나, 특정 영역을 강조할 때 사용됨.
  • 매개변수
    • img:
      • 원을 그릴 이미지. 이 이미지는 NumPy 배열 형태로 제공됨.
    • center:
      • 원의 중심 좌표를 나타내는 튜플 (x, y) 형식.
      • 예를 들어, (250, 250)은 이미지 내에서 원의 중심이 되는 위치를 지정.
    • radius:
      • 원의 반지름을 나타내는 정수 값.
      • 예를 들어, radius=50으로 설정하면 반지름이 50인 원이 그림.
    • color:
      • 원의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 원의 테두리 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.
 

arrow_upwardarrow_downwardlinkcommenteditdeletemore_vert

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)

  • 기능 설명
    • 이미지 위에 타원(ellipse)을 그릴 때 사용하는 함수
    • 이 함수는 지정된 중심, 축의 길이, 회전 각도 등을 기준으로 타원을 그려주며, 타원형의 도형을 정확하게 시각화하는 데 유용함.
    • 타원은 원을 일반화한 형태로, 중심, 반지름(축의 길이), 회전 등을 조절하여 다양한 형태의 타원을 그릴 수 있음.
  • 매개변수
    • img: 타원을 그릴 이미지입니다. 이 이미지는 NumPy 배열 형태로 제공.
    • center: 타원의 중심 좌표를 나타내는 튜플 (x, y) 형식.
    • axes: 타원의 반지름을 나타내는 튜플 (major_axis_length, minor_axis_length) 형식. 여기서 major_axis_length는 주요 축의 길이, minor_axis_length는 부축의 길이.
    • angle: 타원의 회전 각도를 지정하는 값. 단위는 도(degree)이며, 주어진 각도만큼 타원이 회전.
    • startAngle: 타원 호의 시작 각도를 지정하는 값. 단위는 도(degree).
    • endAngle: 타원 호의 끝 각도를 지정하는 값. 단위는 도(degree).
    • color:
      • 타원의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 타원의 테두리 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.

2.2.5 글씨 그리기


 

cv2.putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

  • 기능 설명
    • 이미지 위에 텍스트를 추가할 때 사용하는 함수
    • 이 함수는 지정된 위치에 텍스트를 삽입하며, 폰트 스타일, 크기, 색상, 두께 등을 조절할 수 있어 이미지에 주석을 달거나 정보를 표시할 때 유용
  • 매개변수
    • img:
      • 타원을 그릴 이미지. 이 이미지는 NumPy 배열 형태로 제공됨.
    • text:
      • 이미지에 추가할 텍스트 문자열.
      • 예를 들어, "Hello, World!"와 같은 형태로 입력.
    • org:
      • 텍스트의 시작 좌표를 나타내는 튜플 (x, y) 형식
      • 텍스트의 왼쪽 하단 모서리가 이 좌표에 위치.
    • fontFace: 폰트 종류를 지정하는 매개변수. OpenCV는 여러 가지 폰트를 지원:
      • cv2.FONT_HERSHEY_SIMPLEX: 기본 산세리프 폰트
      • cv2.FONT_HERSHEY_PLAIN: 기본 산세리프 폰트, 더 얇은 버전
      • cv2.FONT_HERSHEY_DUPLEX: 더 두꺼운 기본 산세리프 폰트
      • cv2.FONT_HERSHEY_COMPLEX: 복잡한 산세리프 폰트
      • cv2.FONT_HERSHEY_TRIPLEX: 더 두껍고 복잡한 산세리프 폰트
      • cv2.FONT_HERSHEY_COMPLEX_SMALL: 작은 복잡한 산세리프 폰트
      • cv2.FONT_HERSHEY_SCRIPT_SIMPLEX: 필기체 폰트
      • cv2.FONT_HERSHEY_SCRIPT_COMPLEX: 더 복잡한 필기체 폰트
    • fontScale:
      • 폰트의 크기를 조정하는 값. 숫자가 클수록 폰트가 커짐.
    • color:
      • 텍스트의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 텍스트의 테두리 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.

2.2.1 직선 그리기

 

 

cv2.line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

  • 기능 설명
    • 이미지 위에 선을 그릴 때 사용하는 함수
    • 이 함수는 두 점을 연결하는 선을 이미지 위에 그려주는 역할
    • 주로 이미지에 도형을 그리거나, 특정 객체를 강조할 때 사용됨.
  • 매개변수
    • img:
      • 선을 그릴 이미지. 이 이미지는 NumPy 배열 형태로 제공됨.
    • pt1:
      • 선의 시작점 좌표를 나타내는 튜플 (x, y) 형식.
    • pt2:
      • 선의 끝점 좌표를 나타내는 튜플 (x, y) 형식.
    • color:
      • 선의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 선의 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.

2.2.2 사각형 그리기

 

 

cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

  • 기능 설명
    • 이미지 위에 직사각형을 그릴 때 사용하는 함수
    • 이 함수는 두 점을 연결하는 사각형을 이미지 위에 그려주는 역할
    • 주로 객체 감지 결과를 시각적으로 표시하거나, 특정 객체를 강조할 때 사용됨.
  • 매개변수
    • img:
      • 직사각형을 그릴 이미지. 이 이미지는 NumPy 배열 형태로 제공됨.
    • pt1:
      • 직사각형의 왼쪽 위 모서리 좌표를 나타내는 튜플 (x, y) 형식.
    • pt2:
      • 직사각형의 오른쪽 아래 모서리 좌표를 나타내는 튜플 (x, y) 형식.
    • color:
      • 직사각형의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 직사각형의 테두리 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 직사각형이 그려진 이미지를 직접 수정합니다.

2.2.3 다각형 그리기

 

 

cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)

  • 기능 설명
    • 이미지 위에 여러 개의 점들을 연결하여 폴리라인(다각형의 경계선)을 그릴 때 사용하는 함수
    • 이 함수는 이미지 위에 닫힌 또는 열린 다각형을 그리는 데 유용하며, 다양한 도형을 그려주는 역할
    • 주로 객체의 윤곽선을 강조하거나 복잡한 다각형 모양을 그릴 때 사용됨.
  • 매개변수
    • img:
      • 다각형을 그릴 이미지. 이 이미지는 NumPy 배열 형태로 제공됨.
    • pts:
      • 다각형의 꼭짓점 좌표를 담은 리스트
      • 이 리스트는 Numpy 배열로 표현
      • 배열의 형태는 (number_of_points, 1, 2). 각 점은 (x, y) 형식의 좌표.
    • isClosed:
      • 폴리라인의 마지막 점과 첫 번째 점을 연결하여 닫힌 다각형을 만들지 여부를 결정하는 Boolean 값
      • True로 설정하면 폴리라인이 닫힌 다각형이 되고, False로 설정하면 열린 폴리라이됨.
    • color:
      • 폴리라인의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 폴리라인의 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.

2.2.4 원, 타원, 호 그리기

 

cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)

  • 기능 설명
    • 이미지 위에 원(circle)을 그릴 때 사용하는 함수
    • 이 함수는 중심 좌표와 반지름을 지정하여 이미지 위에 원을 그려주는 역할
    • 주로 객체의 중심을 표시하거나, 특정 영역을 강조할 때 사용됨.
  • 매개변수
    • img:
      • 원을 그릴 이미지. 이 이미지는 NumPy 배열 형태로 제공됨.
    • center:
      • 원의 중심 좌표를 나타내는 튜플 (x, y) 형식.
      • 예를 들어, (250, 250)은 이미지 내에서 원의 중심이 되는 위치를 지정.
    • radius:
      • 원의 반지름을 나타내는 정수 값.
      • 예를 들어, radius=50으로 설정하면 반지름이 50인 원이 그림.
    • color:
      • 원의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 원의 테두리 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.

arrow_upwardarrow_downwardlinkcommenteditdeletemore_vert

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)

  • 기능 설명
    • 이미지 위에 타원(ellipse)을 그릴 때 사용하는 함수
    • 이 함수는 지정된 중심, 축의 길이, 회전 각도 등을 기준으로 타원을 그려주며, 타원형의 도형을 정확하게 시각화하는 데 유용함.
    • 타원은 원을 일반화한 형태로, 중심, 반지름(축의 길이), 회전 등을 조절하여 다양한 형태의 타원을 그릴 수 있음.
  • 매개변수
    • img: 타원을 그릴 이미지입니다. 이 이미지는 NumPy 배열 형태로 제공.
    • center: 타원의 중심 좌표를 나타내는 튜플 (x, y) 형식.
    • axes: 타원의 반지름을 나타내는 튜플 (major_axis_length, minor_axis_length) 형식. 여기서 major_axis_length는 주요 축의 길이, minor_axis_length는 부축의 길이.
    • angle: 타원의 회전 각도를 지정하는 값. 단위는 도(degree)이며, 주어진 각도만큼 타원이 회전.
    • startAngle: 타원 호의 시작 각도를 지정하는 값. 단위는 도(degree).
    • endAngle: 타원 호의 끝 각도를 지정하는 값. 단위는 도(degree).
    • color:
      • 타원의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 타원의 테두리 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.

2.2.5 글씨 그리기

 

 

cv2.putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

  • 기능 설명
    • 이미지 위에 텍스트를 추가할 때 사용하는 함수
    • 이 함수는 지정된 위치에 텍스트를 삽입하며, 폰트 스타일, 크기, 색상, 두께 등을 조절할 수 있어 이미지에 주석을 달거나 정보를 표시할 때 유용
  • 매개변수
    • img:
      • 타원을 그릴 이미지. 이 이미지는 NumPy 배열 형태로 제공됨.
    • text:
      • 이미지에 추가할 텍스트 문자열.
      • 예를 들어, "Hello, World!"와 같은 형태로 입력.
    • org:
      • 텍스트의 시작 좌표를 나타내는 튜플 (x, y) 형식
      • 텍스트의 왼쪽 하단 모서리가 이 좌표에 위치.
    • fontFace: 폰트 종류를 지정하는 매개변수. OpenCV는 여러 가지 폰트를 지원:
      • cv2.FONT_HERSHEY_SIMPLEX: 기본 산세리프 폰트
      • cv2.FONT_HERSHEY_PLAIN: 기본 산세리프 폰트, 더 얇은 버전
      • cv2.FONT_HERSHEY_DUPLEX: 더 두꺼운 기본 산세리프 폰트
      • cv2.FONT_HERSHEY_COMPLEX: 복잡한 산세리프 폰트
      • cv2.FONT_HERSHEY_TRIPLEX: 더 두껍고 복잡한 산세리프 폰트
      • cv2.FONT_HERSHEY_COMPLEX_SMALL: 작은 복잡한 산세리프 폰트
      • cv2.FONT_HERSHEY_SCRIPT_SIMPLEX: 필기체 폰트
      • cv2.FONT_HERSHEY_SCRIPT_COMPLEX: 더 복잡한 필기체 폰트
    • fontScale:
      • 폰트의 크기를 조정하는 값. 숫자가 클수록 폰트가 커짐.
    • color:
      • 텍스트의 색상을 지정하는 튜플 (B, G, R) 형식.
        • 예를 들어, 빨간색은 (0, 0, 255)로 지정.
    • thickness (선택 사항):
      • 텍스트의 테두리 두께를 지정하는 정수 값. 기본값은 1
        • 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
    • lineType (선택 사항):
      • 선의 유형을 지정하는 매개변수.
      • 선의 모양을 조정, 기본값은 cv2.LINE_8.
        • cv2.LINE_4: 4-connected 선
        • cv2.LINE_8: 8-connected 선 (기본값)
        • cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
    • shift (선택 사항):
      • 좌표 값의 소수점 자릿수 지정. 기본값 0.
  • 반환값
    • 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.
opencv강좌_01.ipynb
0.07MB
opencv강좌_02.ipynb
1.31MB

03장 numpy_matplotlib

3.1.2 NumPy 배열 생성

 

 
  • 값으로 생성 : array()
  • 초기값으로 생성 : empty(), zeros(), ones(), full()
  • 기존 배열로 생성 : empty_like(), zeros_like(), ones_like(), full_like()
  • 순차적인 값으로 생성 : arrange()
  • 난수로 생성 : random.rand(), random.randn()

 

3.2.3 color와 style

opencv강좌_03.ipynb
1.09MB

04장 이미지 프로세싱 기초

4.1 관심영역

 

  • 전체 이미지를 대상으로 연산을 하는 것 보다 관심이 있는 부분만 잘라내서 하는 것이 효과적임
  • 데이터 양이 줄어들면 형태가 단순해져 적용하는 알고리즘과 좌표를 구하는 것이 단순해짐
 


4.1.1 관심영역 지정


 

관심 영역(ROI : Region Of Interest) : 이미지에서 분석의 대상으로 지정한 영역

  • img[y:y+h, x:x+w]
    • y, x : 관심 영역 시작점
    • h, w : 영역의 폭

4.1.2 마우스로 관심영역 지정

 

 

 

매번 정확한 값으로 해당 위치의 값을 어려움

  • 마우스를 이용해 원하는 영역을 직접 지정하고 좌표를 얻음

cv2.selectROI 함수 사용

  • OpenCV에서 제공하는 관심영역 지정함수
 

 

 

영역 선택하고 나서 키보드 space나 enter 키 누르면 선택 영역 반환

  • 취소 c
  • showCrossHair True : 마우스로 선택하는 동안 사각형안의 십자모양이 그려짐
  • fromCenter True : 마우스의 시작지점을 중심점으로 간주

4.2.4 HSV, HSI, HSL

 

 

이미지를 읽어 온 후에 속성을 변경하고자 하는 경우

opencv강좌_04.ipynb
11.59MB
DR-01408_박성호_딥러닝개론_9차.png
0.10MB

'두산 로보틱스 부트캠프 ROKEY > Computer Vision 교육' 카테고리의 다른 글

ep.37 OpenCV3  (0) 2024.08.28
ep.36 OpenCV2  (0) 2024.08.27
ep.34 딥러닝개론8  (0) 2024.08.23
ep.33 딥러닝개론7  (0) 2024.08.22
ep.32 딥러닝개론6  (0) 2024.08.21