일단 opencv 영상 데이터는 numpy.ndarray로 표현을 하는데
imread로 파일을 로드하게 되면 numpy.ndarray로 영상을 받게 되는데
ndarray의 속성을 살펴보면
ndim , shpe , size , dtype 등이 있는데
ndim은 차원 수와 같은데 몇차원 배열인지를 보여준다. 2면 GrayScale 3이면 Color Type이라고 볼 수 있다.
shape는 각 차원의 크기, h,w 또는 h,w,3 ( 컬러 ) , h,w,4 ( png - alpha channel ) 로 표현된다.
size는 전체 원소의 개수
dtype 은 원소의 데이터 타입으로, 영상 데이터는 unit8 ( 0~ 256 )이다.
OpenCV 영상 데이터 자료형은 다양하게 있는데
간단하게 cv.CV_8U , cv.CV_16U , cv2.CV_32F 등이 있는다.
추후 Opencv 함수를 사용할 때 자료형이 플래그로 사용되는 경우가 많기때문에
자료형을 알고있는게 좋은 편이다.
그래서 영상의 속성을 알고싶을때는 위 속성들을 사용할 수 있다.
위 코드처럼 shape를 이용하면 이미지 각 차원의 크기를 반환해주는것을 볼 수 있다.
shape은 [:숫자]로도 활용할 수 있는데 처음부터 몇개의 수를 가져와서 변수에 대입해줄지를 결정해주는 것이다.
그래서 컬러영상일때는 3으로 반환되기때문에 변수를 3개 만들어줘야 한다.
현재 영상이 흑백인지 컬러인지를 알고싶다면 ndim을 사용하여 2(그레이)인지 3(컬러)인지 보면 된다.
그리고 가장 중요한 영상에서 픽셀값을 참조하는 방법에 대해서도 알 수 있었다.
x = 20
y = 10
p1 = img1[y,x]
print(p1)
p2 = img2[y,x]
print(p2)
위 코드는 20,10 좌표에있는 영상의 픽셀값을 추출할 수 있다.
GrayScale은 Gray값
Color는 B G R 값으로 추출된다.
또는 입력을 해줄 수있다.
img1[y,x] = 0
img2[y,x] = (0,0,255)
라고 입력해주면 해당 픽셀에 위 값들이 입력된다.
하지만 위 픽셀 처리는 처리 속도가 Opencv에서 제공해주는 함수에 비해 상당히 느리기 때문에
이론으로만 알고 참고하는 경우로만 사용하고
실제 영상의 픽셀처리는 OpenCV에서 제공해주는 항수로 사용하는게 좋다.
( 파이썬의 경우만 그렇다. C언어에서는 괜찮음 )
예를들면
img1[:,:] = 0
img2[:,:] = (0,255,255)
라는 전체 범위값을 지정해주면 전체 범위의 픽셀처리가 가능하다.
따라서 파이썬에서는 구현해보려는 기능이 대체할 수 있는 함수가 무엇이 있는지 잘 찾아보고
하는게 처리 속도나 구현 방법에서 훨씬 효율적일 것이다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] OpenCV-Python 기초 사용법 _ 마스크 연산과 ROI (0) | 2022.04.27 |
---|---|
[Open CV] OpenCV-Python 기초 사용법 _ 영상의 생성, 복사, 부분 영상 추출 (0) | 2022.04.26 |
[Open CV] OpenCV-Python 시작하기 _ 실전코딩 ( 이미지 슬라이드쇼 ) (0) | 2022.04.24 |
[Open CV] OpenCV-Python 시작하기 _ Matplotlib 사용하여 영상 출력하기 (0) | 2022.04.23 |
[Open CV] OpenCV-Python 시작하기 _ OpenCV 주요 함수 설명 (0) | 2022.04.22 |