이번 포스팅에서는 opencv를 통해 아래 양이미지를 읽는 방법에 대해 알아보도록 하겠습니다.
//sheep.jpg
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 sheep.jpg](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
1) 이미지 읽기
이미지를 읽을때는 image read의 약자인 imread함수를 이용하는데요. 인자로는 읽어올 파일의 경로를 적어주면 됩니다.
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 1) 이미지 읽기 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 1) 이미지 읽기](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
2) flag 설정
공식문서에 보면 imread함수에는 flag라는 인자값이 있는데요.
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 2) flag 설정 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 2) flag 설정](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
이는 해당 이미지를 읽어 올때 컬러 이미지로 읽을지, 그레이스케일 이미지로 읽을지 정하는 것이라고 보면 됩니다.
가령 컬러 이미지로 읽고 싶다면 cv2.IMREAD_COLOR,
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 2) flag 설정 컬러이미지](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
그레이스케일 이미지로 읽고 싶을땐, cv2.IMREAD_GRAYSCALE 을 두번째 인자로 넣어주면 됩니다.
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 2) flag 설정 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 2) flag 설정](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
참고로 cv2.IMREAD_COLOR은 숫자 1로,
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 2) flag 설정 IMREAD_COLOR](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
cv2.IMREAD_GRAYSCALE은 숫자 0으로 쓰이기도 하니 참고하기 바랍니다.
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 2) flag 설정 GRAYSCALE](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
3) return image 값
imread함수를 통해 리턴받은 img값의 정체는 무엇일까요?
(1) 타입(type)
먼저 타입을 찍어보면,
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 타입](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
output:
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 ndarray](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
넘파이 ndarray이라는 것을 알 수 있습니다.
(2) shape
shape의 경우 flag를 어떻게 설정하느냐에 따라 달라 지는데요.
먼저 IMREAD_COLOR을 통해 이미지를 읽으면
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값](https://blog.kakaocdn.net/dn/dkj9w0/btrKVxkHdRf/gi0LsToW1IQPFvnsIOW1QK/img.png)
3차원의 shape이고, 마지막 차원의 3은 BGR컬러 채널을 의미합니다.
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값](https://blog.kakaocdn.net/dn/bdBwSM/btrKVxSwviO/ycKw3RX5cwESHCJS6KDOG0/img.png)
IMREAD_GRAYSCALE을 통해 이미지를 읽으면,
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값](https://blog.kakaocdn.net/dn/4akOH/btrKQhKCNuX/QrC4XybdROP8opPcLEiFJk/img.png)
채널 차원이 빠진 2차원의 shape이 출력됩니다.
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값](https://blog.kakaocdn.net/dn/qM6mX/btrKQRrpH7N/KKFYtgdQ0kkTm7Y4zEGLOK/img.png)
(3) dtype
ndarray 내부 요소들의 타입은 무엇일까요?
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값](https://blog.kakaocdn.net/dn/NgWL6/btrKSfMu3xO/dymJkuB4Xk6KHs2JzBzk10/img.png)
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값](https://blog.kakaocdn.net/dn/vueQL/btrKOHWUucv/rT4fhOKfyyJhRgCHtZmco0/img.png)
uint8, 즉 unsigned int로, 0부터 255값을 의미합니다.
실제로 이미지를 print 해보면,
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값](https://blog.kakaocdn.net/dn/wRPMS/btrKU6HxDdI/pje7iJZp74C6vk0bzNkHm0/img.png)
아래와 같은 int형태의 값들로 구성 되어 있습니다.
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값](https://blog.kakaocdn.net/dn/bnbcG7/btrKTpnMOGB/QvoZ9t3ZBjDm51MjDAc6kK/img.png)
(4) 이미지 dtype 변경
이미지 프로세싱을 하다보면 디테일한 값의 변화를 체크하기 위해 dtype을 float형태로 바꿔줄 필요도 있는데요.
이때는 astype() 메소드를 이용하여 타입을 변경해주시면 됩니다.
![[오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값 [오픈 cv python] 이미지 읽기(cv2.imread) | 컬러 , 흑백 - undefined - 3) return image 값](https://blog.kakaocdn.net/dn/b0mJUt/btrKTOgDD71/k75ZnbFGm4JLz2XbtUeVXK/img.png)
'머신러닝,딥러닝 > opencv' 카테고리의 다른 글
[파이썬 opencv] 오픈 cv에서 yolov3 사용하는 방법 (2) | 2022.10.26 |
---|---|
[파이썬 opencv] 오픈 cv에서 detection model 실행하는 방법 (0) | 2022.10.21 |
[오픈 cv] 트랙바란? 트랙바 사용방법(for opencv 초보자) (0) | 2022.09.14 |
[파이썬 opencv] 두 이미지 합치는 방법(with 크기 다른 이미지) (0) | 2022.09.13 |
[opencv] 그림 그리기 | 글자 쓰는 법 (+ 한글 사용 방법) (0) | 2022.09.06 |
댓글
꼬예님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.