Ch 01. OpenCV-Python 시작하기 - 07. Matplotlib 사용하여 영상
Ch 02. OpenCV-Python 기초 사용법 - 01. 영상의 속성과 픽셀 값 처리
Ch 02. OpenCV-Python 기초 사용법 - 02. 영상의 생성, 복사, 부분 영상
Ch 02. OpenCV-Python 기초 사용법 - 03. 마스크 연산과 ROI
두 번째 학습 기록지 작성 포스팅입니다.
확실히 100% 환급 챌린지에 참여하니 빨리 공부하고 블로그 작성해야지! 하는 생각이 들더군요.
공부도 하고 블로그 글도 작성하고 참여하길 잘했다는 생각이 듭니다ㅎ
오늘은 openCV-python에서 영상의 픽셀을 참조하는 방법과
영상을 복사하거나 잘라내어 view를 만드는 방법, 마스크 연산 관련 함수에 대해 배운 내용들을
정리해 보겠습니다.
>> matplotlib
matplotlib 라이브러리는 그래프, 차트, 히스토그램 등의 다양한 그리기 기능을 제공하는 python 패키지다.
>> matplotlib 라이브러리를 사용해서 영상을 출력하는 방법
- 컬러 영상을 불러오는 방법
openCV에서는 컬러 영상을 불러오면 rgb의 값을 bgr의 순서로 색상을 저장한다.
하지만 Matplotlib 라이브러리에서는 영상의 rgb 값을 그대로 rgb 순서로 색상을 저장한다.
그렇기 때문에 cv2.cvtColor() 라는 함수를 사용하여 순서를 바꿔줘야 함.
imgBGR = cv2.imread('image.jpg')
이렇게 openCV를 사용하여 영상을 불러온 후
plt.imshow(imgBGR)
을 시행했을 경우 red와 blue의 위치가 뒤 바뀌어 영상의 색상이 잘못되어 보인다.
그렇기 때문에
cv2.cvtColor(imgBGR, cv2.COLOR_BGR2RGB)
를 작성하여 BGR 순서를 RGB로 변환하여 plt.imshow()를 해주어야 한다.
- gray scale 영상을 불러오는 방법
plt.imshow() 함수에서 컬러 맵을 cmap=’gray’ 이라고 옵션을 추가해 주어야 한다.
ply.imshow(imgGray, cmap='gray')
>> 픽셀 값 참조 법
cv2.imread()를 사용하여 영상을 불러올 때
리턴 값 np.ndarray numpy 라이브러리에서 제공해주는 자료형이다.
(numpy는 openCV-python을 설치할 때 자동으로 설치된다.)
> 제공 method
.shape = (h, w) height와 width의 값을 반환 컬러 이미지의 경우 (h, w, 3)을 반환한다.
.ndim = 차원 수 반환 (gray scale 영상의 경우 2, 컬러 영상의 경우 3을 반환하여
len(ndarray.shape)와 동일하다.
.size = 전체 원소 개수
.dtype = 원소의 데이터 타입 (파이썬에서는 unit8)
> 픽셀 참조
x = 20
y = 40
에 위치한 pixel 값을 참조하거나 수정하고 싶다면
img[40, 20] 으로 참조가 가능하다.
배열의 행과 열의 위치를 잘 고려하자!
<여기서 주의점>
파이썬에서 이중 for문을 사용하여 픽셀을 참조하고 수정하면 매우 느린다.
웬만하면 openCV에서 제공하는 함수를 사용하자.
>> 영상의 생성, 복사, 부분 영상 추출
numpy.empty() 함수는 임의의 값으로 초기화된 배열을 생성
numpy.zeros() 함수는 0으로 초기화된 배열을 생성
numpy.ones() 함수는 1로 초기화된 배열을 생성
numpy.full() 함수는 fill_value로 초기화된 배열을 생성
image2 = image1
이렇게 코드를 작성하면 image2는 image1을 참조할 뿐 새로운 메모리 영역에 복사가 되지 않는다.
copy by reference라고 보면 된다.
딥 카피를 하고 싶은 경우에는 .copy()를 사용하자.
>> 마스크 영상
ROI: region of interest라고 하여 관심 영역이라는 의미이다.
영상에서 특정 연산을 수행하고자 하는 임의의 부분 영역
영상처리에서 마스크 영상이란 ROI부분을 흰색으로 채우고 나머지 부분을 검은색으로 채운 gray scale 영상이다.
마스크 연산의 연산 기준은 ROI가 흰색인 부분이 기준이 아니라 실제로는 0이 아닌 부분을 기준으로 연산한다.
하지만 사람의 눈으로 0과 1의 차이를 알기 어렵기 때문에 0과 255로 구성된 이진 영상을 사용한다.
강의 링크: bit.ly/2NTHHz7
'난 이 분야 전문가야! > OpenCV' 카테고리의 다른 글
컴퓨터비전인강 3주차:: 영상에서의 히스토그램 (0) | 2021.03.07 |
---|---|
컴퓨터비전인강 3주차 :: 영상에서의 산술과 다양한 색 공간 (0) | 2021.03.06 |
컴퓨터비전인강 2주차 :: 키보드, 마우스 이벤트 처리 및 트랙바 생성법 (0) | 2021.02.27 |
컴퓨터비전인강 2주차 :: openCV 웹캠, 비디오 재생 및 저장 (0) | 2021.02.24 |
컴퓨터비전인강 1주차 :: 영상의 이해 및 openCV 주요함수 (1) | 2021.02.19 |