내용 |
ToC(Table of Content, 목차)를 보시려면 아나콘다 2022.10 이전 버전을 설치하세요.
https://repo.anaconda.com/archive/ 에서
Anaconda3-2022.10-Windows-x86_64.exe을 내려받아 설치하세요.
이미 설치된 2023.03 버전은 '프로그램 추가/제거'에서 삭제하세요.
그런 후 2022.10 버전을 설치하세요.
아나콘다 프롬프트 실행시켜 OpenCV 설치하세요.
pip install opencv-python
-----------------------------
1장 요약
OpenCV : 오픈소스 영상처리 라이브러리, 구현은 C++, 인터페이스는 파이썬, 자바등으로 제공
pip install opencv-python <-- Anaconda 설치 후 Anaconda Prompt에서 실행
import cv2 <--OpenCV 라이브러리 로드
넘파이배열 = cv2.imread(파일명, 플래그)
cv2.imshow(윈도우타이틀, 넘파일배열)
cv2.imwrite(파일명, 넘파일배열)
cap = cv2.VideoCapture("동영상파일명" 또는 0 또는 "rtsp://...")
cap.isOpened()가 true이면 동영상이 열렸거나 카메라가 연결된 것임
ret, img = cap.read() <-- 프레임 하나를 읽음
창을 띄우고 이벤트 처리하려면...
창, 콜백함수, 창과 콜백함수를 연결 <- cv2.setMouseCallback(윈도우타이틀, 콜백함수이름)
cv2.namedWindow(윈도우타이틀) <-- 타이틀만 갖는 윈도우 생성, 이거 후 setMouseCallback() 해야 함
line, rectangle, cirlce, ellipse, polylines
2장은...이미지의 기본 연산에 대해서...
-----------------
2일차 아침에 1일차 요약한 것
1일차 정리
OpenCV: 오픈소스 영상처리 라이브러리
C++로 구현, 파이썬 인터페이스를 제공
pip install opencv-python
이미지의 한 점은 화소(Pixel)이라 부름
화소의 좌표 표현은 (x, y)이지만 배열의 인덱싱은 [y, x]임
양자화 레벨이 1바이트(8bit)이므로 한 화소의 색의 표현 범위는 0~255
컬러일 경우 Blue, Green, Red 각 성분이 0~255사이 값을 가짐
0이면 빛이 없으므로 검정, 255이면 완전한 빛이 들어감
Blue, Green, Red 모두 255이면 White, 모두 0이면 Black
영상처리에서 Black은 배경, White가 객체로 간주됨
import cv2 <- OpenCV라이브러리를 불러옴
넘파이배열 = cv2.imread(파일명, 플래그) <- 플래그는 cv2.IMREAD_COLOR, cv2.IMREAD_GRAYSCALE, cv2.IMREAD_UNCHANGED가 있으며 PNG파일의 경우 불투명도를 의미하는 Alpha 채널이 있고 이 값도 읽어들임
cv2.cvtColor(이미지원본, 플래그)를 이용하면 색상 공간(Color Space)을 바꿀수 있음,
보통 컬러를 회색조(Grayscale) 영상으로 바꿀 때 사용함, 그 외에도 BGR -> RGB, RGB -> HSV 등으로 바꿀 때도 사용
OpenCV는 채널이 배열의 마지막 인덱스에 저장 Channel Last이고, 채널의 순서는 BGR(A)
윈도우에 이미지 출력
cv2.imshow(윈도우타이틀, 넘파이배열)
cv2.waitKey() <-- 무한 대기
cv2.destroyAllWindows() <-- 모든 창을 닫기
cap = cv2.VideoCapture(동영상파일경로 또는 0 등 숫자 또는 rtsp://주소)
if cap.isOpened():
ret, img = cap.read() <-- 프레임 하나를 읽어들임, ret는 true/false, img는 넘파이배열/None
이벤트
마우스 이벤트, 이벤트소스(윈도우), 이벤트 핸들러(콜백함수), cv2.setMouseCallback(윈도우타이틀, 콜백함수)
def 콜백함수(event, x, y, flag, param)
키보드 이벤트 : 키코드 = cv2.weitKey(대기시간을 밀리초로 설정) <- -1 또는 눌러진 키코드
도형 그리기
-- 2장
이미지 연산
기본 연산은 넘파일 배열을 이용
* 넘파이는 255값을 넘으면 나머지 값이 저장된다는 것을 주의하세요. 255보다 크면 255로 정하는 Saturation연산이 필요
* 넘파이의 인덱싱/슬라이싱을 사용해서 연산하세요. 브로드캐스팅 규칙을 사용하세요.
|