일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- numpy
- Python
- NLP
- cv2
- OpenCV
- reconstruction
- Object Detection
- 딥러닝
- deep learning
- flame
- level2
- re-identification
- center loss
- attention
- 자료구조
- Computer Vision
- Knowledge Distillation
- 큐
- 3D
- Deeplearning
- point cloud
- 프로그래머스
- 임계처리
- Threshold
- 스택
- Object Tracking
- transformer
- 알고리즘
- 논문 구현
- 파이썬
- Today
- Total
공돌이 공룡의 서재
[python openCV] 이미지 처리 - 읽기 / 보기 : imread, imshow, waitKey 본문
<이번 포스트에서 쓸 사진. 다른 사진 써도 무방>
<기본 개념>
1. 이미지 저장형식
컬러 이미지로는 RGB, BGR, HSV 등이 있고 흑백으로는 Grayscale 형태가 주로 쓰인다.
이미지를 불러오면 전자의 경우 3차원 행렬, 후자의 경우 2차원 행렬이다. 각 저장형식에 따른 설명은 다음과 같다.
RGB: 빛의 3원소 (Red/Green/Blue)를 0~255 에 해당하는 값으로 저장한다. 빛은 겹칠수록 흰색에 가까워지기 때문에, (255, 255, 255) 에 가까워질수록 흰색, (0, 0, 0)에 가까워질수록 검정색이다.
BGR: openCV에서는 처음 이미지를 불러오면 BGR형태로 불러온다. 순서가 RGB와 반대
HSV: Hue(색상), Saturation(채도), Value(명도) 의 형태로 이미지를 나타낸다. 특정 색상을 정하기 좋다.
Grayscale: 흑백이미지. HSV에서 V에 대한 값만 저장한다.
BGRA, RGBA: 위의 RGB, BGR에서 알파채널(A)의 값을 추가로 저장함으로써 이미지의 투명도에 대한 정보를 저장한다.
2. 이미지 = 행렬
이미지는 해상도만큼 픽셀 수를 갖는다. 256x256 해상도라고 하면 65536개의 픽셀, 1080x720 해상도면 777600개의 픽셀을 갖는다. 각 픽셀들의 값을 달리하여 색, 형태, 등을 표현할 수 있게 되는 것이다.
이 때 컴퓨터에서 이미지를 다룰 때 행렬로 받아들이기 때문에, 1080(가로)x720(세로) 크기의 이미지를 불러온다면 720행 1080열에 해당하는 이미지를 불러오는 것과 같다. 즉, 행의 개수가 세로 길이, 열의 개수가 가로 길이에 대응된다.
또한 주의할 점은 좌측상단의 모서리에 해당하는 점을 (0, 0) 으로 본다는 점이다.
<이미지 읽기 & 보기>
1. 함수 설명
cv2.imread(filename, flag=None)
filename : 읽을 이미지 파일의 경로
flag : 어떤 이미지 형태로 읽을 것인지 (BGR, RGB, HSV, Grayscale, 등)
cv2.imshow(winname, mat)
winname : 이미지를 띄울 창 이름이다. 아무렇게 이름을 정해도 상관은 없는데 따옴표를 이용해서 string type으로 작성해줘야 한다.
mat : image의 픽셀 값들에 해당하는 matrix(행렬)
cv2.waitKey(delay=None):
imshow에서 띄운 창들을 몇 초 동안 띄울 것인지를 정할 수 있다.
단위가 ms 이므로 1초 단위로 보고 싶으면 1000단위로 값을 정해주면 된다.
따로 쓰지 않거나 0 으로 정하면 창이 꺼지지 않는다.
주의할점은 imshow만 쓰고 waitKey를 안 쓰면 에러가 난다. 한 세트라 생각하고 꼭 같이 써주자.
위 두 사진을 읽어보자.
2. 코드
import cv2
'''py 파일이 있는 폴더에 있는 이미지를 읽을 때'''
ferret = cv2.imread('./ferret.jpg')
'''다른 폴더에 있는 이미지를 읽을 때 전체 경로를 복붙해서 넣어준다.'''
cat = cv2.imread('C:\\Users\\82106\\Desktop\\dino_lib\\cat.jpg')
cv2.imshow('ferret', ferret)
cv2.imshow('cat on chair', cat)
cv2.waitKey()
※
전체 경로를 복붙해서 파일을 읽을 때 백슬래쉬가 1개면 다음과 같은 오류를 보는 경우가 있다.
백슬래쉬를 하나씩 더 추가해주면 오류가 사라진다.
3. 결과
크기가 매우 큰데 원본 파일 해상도 그대로 열어서 그렇다.
다음 글에서는 색상 변환, 크기 변환에 대해 다뤄보겠다.
'코딩 > opencv' 카테고리의 다른 글
[python openCV] 이미지 처리 - 임계 처리 (4): adaptive threshold (0) | 2020.09.22 |
---|---|
[python openCV] 이미지 처리 - 임계 처리 (3): triangle algorithm thresholding 논문 분석 및 구현 (0) | 2020.09.11 |
[python openCV] 이미지 처리 - 임계 처리 (2): otsu algorithm thresholding 논문 분석 및 구현 (0) | 2020.09.11 |
[python openCV] 이미지 처리 - 임계 처리 (1): inRange, threshold (0) | 2020.09.02 |
[python openCV] 이미지 처리 - 크기 / 색상 변환 : resize, cvtColor (0) | 2020.08.21 |