printf("ho_tari\n");
ep.35 OpenCV1 본문
2024.8.26
영상처리(Image Processing)
- 입력 받은 영상을 사용 목적에 맞게 적절하게 처리하여 보다 개선된 영상을 생성하는 것
- 입력 영상에 있는 잡음(noise) 제거, 영상의 대비(contrast) 개선, 관심영역(region of interest) 강조, 영역 분할(segmentation), 압축 및 저장 등
- 저수준 영상 처리(좁은 의미의 영상 처리)
- 영상 획득
- 영상 향상
- 영상 복원
- 변환 처리
- 영상 압축
- 고수준 영상 처리(컴퓨터 비전)
- 영상 분할
- 영상 표현
- 영상 인식
영상 처리의 역사
- 영상 처리의 시작
- 1920년대 초반 런던과 뉴욕 간에 해저 케이블을 통한 신문사들이 사진 전송
- 본격적인 영상 처리 위한 기술
- 1940년대 폰 노이만의 디지털 컴퓨터의 개념 시작
- 1950년 이후 트랜지스터, IC, 마이크로프로세서 같은 하드웨어 발달
- 1950~60년대 프로그램의 언어의 발달과 운영체제 등의 소프트웨어 기술 발달
- 본격적인 영상 처리 시작
- 우주 탐사 계획인 아폴로 계획과도 관련, 우주선에서 보낸 훼손된 영상의 복원 연구
- 1970년대 영상 처리 분야 더욱 발전
- CT, MRI 등의 의료 분야
- 원격 자원 탐사, 우주 항공 관련 분야
- 1990년대 컴퓨터 비전과 응용 분야 급속히 확장
- 인터넷 시대에 영상검색, 영상전송, 영상광고
- 디지털 방송 관련 컴퓨터 그래픽스, 디지털 카메라 보급
영상 처리 응용 분야
- 의료 분야 (방사선, 초음파)
- 컴퓨터 단층촬영(CT), 자기 공명영상 (MRI)
- 양전자 단층촬영(PET)
- [이미지 출처] https://www.thedailypost.kr/news/photo/201911/71239_62509_1941.png
- 방송 통신 분야
- 디지털 방송 서비스로 인한 영상처리 기술 발달
- 스포츠 방송 분야에 영상 처리 기술 적용 , 가상광고 분야
- [이미지 출처] https://images.chosun.com/resizer/O_IUbW99vZwUMM_WZcyNR9bz0n8=/464x0/smart/cloudfront-ap-northeast-1.images.arcpublishing.com/chosun/6BUPRT3DPCBZKIUQ2THO5MEJLQ.jpg
- 공장 자동화 분야
- 기상 및 지질 탐사 분야
- 방대한 기상 정보를 이용의 시각화
- 다양한 주파수의 사진들을 영상 처리 기술로 표현
- [이미지 출처] https://cs.lbl.gov/assets/Images/News/2015/Deep-Learning/_resampled/resizedimage500220-TECAclimatesim2.jpg
- 애니메이션 및 게임 분야
- 촬영된 영상과 그래픽 기술이 조합
- 현실감 향상
- [이미지 출처] https://instabug.com/blog/wp-content/uploads/2017/11/maya-lt-2.jpg
- 출판 및 사진 분야
- 영상 생성, 품질 향상, 색상을 조작 등의 작업을 위해 영상 처리 기술 사용
- 기존 영상에 영상 처리 기술을 융합하여 새로운 합성 영상
- [이미지 출처] https://i0.wp.com/photofocus.com/wp-content/uploads/2020/10/ps-neural-filters.jpg
컴퓨터 비전 처리 단계
- 전처리 단계
- 주로 영상처리 기술 사용
- 다양한 특징 추출 : 에지(edge), 선분, 영역, SIFT(Scale-Invariant Feature Transform) 등
- 고수준 처리
- 특징정보를 사용하여 영상을 해석, 분류, 상황묘사 등 정보 생성
화소(pixel, 畵素)
- 디지털 영상을 표현하는 2차원 배열에서 각 원소
- 해당 위치에서 빛의 세기에 대응하는 값
- 0은 검은색을 나타내고, 화소값이 커질수록 밝은 색
- 컬러 영상
- R(red), G(green), B(blue) 세 가지 색상에 대한 정보 화소 정보 표현
- 2차원 행렬 3개로 표현
- 화소를 처리하는 것이 영상 처리의 시작
이미지와 색공간
- 색: 빛에서 주파수(파장)의 차이에 따라 다르게 느껴지는 색상
- 가시광선: 전자기파 중에서 인간이 인지할 수 있는 약 380nm~780nm 사이의 파장
- 0 ~ 255 사이의 값으로 밝기를 표현
- color: 3차원 (true color 라고도 불림) [이미지 출처] https://commons.wikimedia.org/wiki/File:RGB_color_space_animated_view.gif
- gray scale: 2차원
- 0~255의 값을 통해 밝기를 표현
- 0으로 갈수록 어두워지고, 255로 갈수록 밝아짐
이미지 파일 형식
- 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초 동안 대기한 후 다음 코드로 넘어감.
- 0: 무한정 키 입력을 기다림.
- 키 입력을 기다리는 시간(밀리초 단위)을 나타내는 정수.
- 반환값
- 정수 값: 사용자가 누른 키의 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)를 사용
- 특정 비디오 캡처 API를 사용할 때 선택적으로 지정할 수 있는 매개변수.
- 주요 메서드
- open() : 비디오 파일이나 카메라 장치를 열기 위해 사용.
- 생성자에서 이미 열었기 때문에 일반적으로 필요하지 않지만, VideoCapture 객체를 재사용할 경우 유용합니다.
- isOpened() : 비디오 파일이나 카메라가 정상적으로 열렸는지 확인하는 메서드.
- True를 반환하면 성공적으로 열렸다는 의미.
- read() : 비디오의 다음 프레임을 읽어옴. 이 메서드는 두 개의 값을 반환함:
- ret: 프레임을 성공적으로 읽으면 True, 실패하면 False 반환.
- frame: 읽어들인 프레임을 반환. 만약 읽기에 실패하면 None 반환.
- release() : 비디오 파일이나 카메라 장치를 닫고 자원 해제함.
- 작업이 끝나면 반드시 호출해야 합니다.
- set(propId, value) : 비디오 캡처 속성을 설정하는 메서드.
- 예를 들어, 해상도, 프레임 속도 등을 설정
- get(propId) : 비디오 캡처 속성을 가져오는 메서드.
- 예를 들어, 현재 프레임 위치, 해상도 등을 가져올 수 있음.
- open() : 비디오 파일이나 카메라 장치를 열기 위해 사용.
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)로 지정.
- 선의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 선의 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 선의 두께를 지정하는 정수 값. 기본값은 1
- lineType (선택 사항):
- 선의 유형을 지정하는 매개변수.
- 선의 모양을 조정, 기본값은 cv2.LINE_8.
- cv2.LINE_4: 4-connected 선
- cv2.LINE_8: 8-connected 선 (기본값)
- cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
- shift (선택 사항):
- 좌표 값의 소수점 자릿수 지정. 기본값 0.
- img:
- 반환값
- 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.
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)로 지정.
- 직사각형의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 직사각형의 테두리 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 직사각형의 테두리 두께를 지정하는 정수 값. 기본값은 1
- lineType (선택 사항):
- 선의 유형을 지정하는 매개변수.
- 선의 모양을 조정, 기본값은 cv2.LINE_8.
- cv2.LINE_4: 4-connected 선
- cv2.LINE_8: 8-connected 선 (기본값)
- cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
- shift (선택 사항):
- 좌표 값의 소수점 자릿수 지정. 기본값 0.
- img:
- 반환값
- 이 함수는 반환값이 없으며, 직사각형이 그려진 이미지를 직접 수정합니다.
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)로 지정.
- 폴리라인의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 폴리라인의 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 폴리라인의 두께를 지정하는 정수 값. 기본값은 1
- lineType (선택 사항):
- 선의 유형을 지정하는 매개변수.
- 선의 모양을 조정, 기본값은 cv2.LINE_8.
- cv2.LINE_4: 4-connected 선
- cv2.LINE_8: 8-connected 선 (기본값)
- cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
- shift (선택 사항):
- 좌표 값의 소수점 자릿수 지정. 기본값 0.
- img:
- 반환값
- 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.
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)로 지정.
- 원의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 원의 테두리 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 원의 테두리 두께를 지정하는 정수 값. 기본값은 1
- lineType (선택 사항):
- 선의 유형을 지정하는 매개변수.
- 선의 모양을 조정, 기본값은 cv2.LINE_8.
- cv2.LINE_4: 4-connected 선
- cv2.LINE_8: 8-connected 선 (기본값)
- cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
- shift (선택 사항):
- 좌표 값의 소수점 자릿수 지정. 기본값 0.
- img:
- 반환값
- 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.
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)로 지정.
- 타원의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 타원의 테두리 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 타원의 테두리 두께를 지정하는 정수 값. 기본값은 1
- 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)로 지정.
- 텍스트의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 텍스트의 테두리 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 텍스트의 테두리 두께를 지정하는 정수 값. 기본값은 1
- lineType (선택 사항):
- 선의 유형을 지정하는 매개변수.
- 선의 모양을 조정, 기본값은 cv2.LINE_8.
- cv2.LINE_4: 4-connected 선
- cv2.LINE_8: 8-connected 선 (기본값)
- cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
- shift (선택 사항):
- 좌표 값의 소수점 자릿수 지정. 기본값 0.
- img:
- 반환값
- 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.
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)로 지정.
- 선의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 선의 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 선의 두께를 지정하는 정수 값. 기본값은 1
- lineType (선택 사항):
- 선의 유형을 지정하는 매개변수.
- 선의 모양을 조정, 기본값은 cv2.LINE_8.
- cv2.LINE_4: 4-connected 선
- cv2.LINE_8: 8-connected 선 (기본값)
- cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
- shift (선택 사항):
- 좌표 값의 소수점 자릿수 지정. 기본값 0.
- img:
- 반환값
- 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.
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)로 지정.
- 직사각형의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 직사각형의 테두리 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 직사각형의 테두리 두께를 지정하는 정수 값. 기본값은 1
- lineType (선택 사항):
- 선의 유형을 지정하는 매개변수.
- 선의 모양을 조정, 기본값은 cv2.LINE_8.
- cv2.LINE_4: 4-connected 선
- cv2.LINE_8: 8-connected 선 (기본값)
- cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
- shift (선택 사항):
- 좌표 값의 소수점 자릿수 지정. 기본값 0.
- img:
- 반환값
- 이 함수는 반환값이 없으며, 직사각형이 그려진 이미지를 직접 수정합니다.
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)로 지정.
- 폴리라인의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 폴리라인의 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 폴리라인의 두께를 지정하는 정수 값. 기본값은 1
- lineType (선택 사항):
- 선의 유형을 지정하는 매개변수.
- 선의 모양을 조정, 기본값은 cv2.LINE_8.
- cv2.LINE_4: 4-connected 선
- cv2.LINE_8: 8-connected 선 (기본값)
- cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
- shift (선택 사항):
- 좌표 값의 소수점 자릿수 지정. 기본값 0.
- img:
- 반환값
- 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.
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)로 지정.
- 원의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 원의 테두리 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 원의 테두리 두께를 지정하는 정수 값. 기본값은 1
- lineType (선택 사항):
- 선의 유형을 지정하는 매개변수.
- 선의 모양을 조정, 기본값은 cv2.LINE_8.
- cv2.LINE_4: 4-connected 선
- cv2.LINE_8: 8-connected 선 (기본값)
- cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
- shift (선택 사항):
- 좌표 값의 소수점 자릿수 지정. 기본값 0.
- img:
- 반환값
- 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.
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)로 지정.
- 타원의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 타원의 테두리 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 타원의 테두리 두께를 지정하는 정수 값. 기본값은 1
- 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)로 지정.
- 텍스트의 색상을 지정하는 튜플 (B, G, R) 형식.
- thickness (선택 사항):
- 텍스트의 테두리 두께를 지정하는 정수 값. 기본값은 1
- 예를 들어, thickness=2로 설정하면 두께가 2인 선을 그림.
- 텍스트의 테두리 두께를 지정하는 정수 값. 기본값은 1
- lineType (선택 사항):
- 선의 유형을 지정하는 매개변수.
- 선의 모양을 조정, 기본값은 cv2.LINE_8.
- cv2.LINE_4: 4-connected 선
- cv2.LINE_8: 8-connected 선 (기본값)
- cv2.LINE_AA: 안티에일리어싱(antialiased) 선, 곡선을 더 부드럽게 그리기 위해 사용됨.
- shift (선택 사항):
- 좌표 값의 소수점 자릿수 지정. 기본값 0.
- img:
- 반환값
- 이 함수는 반환값이 없으며, 선이 그려진 이미지를 직접 수정합니다.
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
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
이미지를 읽어 온 후에 속성을 변경하고자 하는 경우
'두산 로보틱스 부트캠프 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 |