OpenCV에서 이미지를 다룰때 이미지 속성을 잘 이해하면 다루기 쉽다.
그러기 위해선 Numpy가 선행되어야한다. 포스팅은 안했지만 나는 numpy에 대해서 알기 때문에 numpy 설명은 pass하겠다.

우선 cv2와 numpy를 import 한다.
객체 img는 다차원 배열 (numpy narray)이다.

독수리 사진을 불러와서 img로 객체를 저장해보고 img.shape, img.size, img.dtype을 살펴보자!
img.shape : 이미지 해상도 및 채널 수 (height, width, channel)
img.size : 이미지 크기 (byte 단위)
img.dtype : 이미지 데이터 타입
※ 수학적인 분석을 할 때 보통 (x,y) 구조가 익숙하기에 헷갈릴 수 있는데 (높이 :height, 너비: width, 채널 ) ≒ (y,x) 순인거에 유의하기
앞의 독수리 사진은 안나와 있지만 img.shape 값을 통해 알 수 있다.
높이가 867값이고 너비가 1280값인 사진이고 채널 수가 3이니 알파값이 제외된 color 사진이다.
이때 channel은 3개인데 index값 0, 1, 2값을 가진다고 생각하면 쉽다. (+alpha값은 3값을 가진다.)
0 : Blue값 1:Green값 2:Red값
cv2에서는 BGR 순이고 matplotlib에서는 RGB순이라
cv2로 받아들인 이미지를 plt를 통해 jupyter notebook에서 바로 확인하고 싶을 땐 변형시켜줘야한다. 이것도 다음에 다루겠다.
이미지의 크기는 3329280값인데 이는 height × width × channel = size (byte단위) 이다.
이미지의 데이터 타입은 uint8 타입인데 이것은 unsigned 8bit integer를 뜻한다. -> 0부터 255사이의 정수 값
즉, 데이터들이 0과 255사이의 정수 값을 가진다는 뜻이다.

픽셀에 대해서 설명하기 위해 독수리사진을 살펴보겠다.
내가 임의로 찍은 점의 위치 (y,x= height, width)값은 정확히 모르겠으나 (mouse 콜백함수 쓰고 event로 함수만들기 귀찮아서..)
대략 (20, 1000) 인 위치라고 하자. 이때의 점 하나를 픽셀 하나라고 생각하면 된다.
(20,1000)인 (y,x) 점에서 (B, G, R) 값이 각각 0 ~ 255 사이의 값을 가지고 있어서 색이 표현되는 것이다.
이게 이해가 된다면 ,

이게 당연히 이해가 된다. 우리는 이렇게 어떤 한 픽셀 값의 B,G,R 값을 확인 할 수도 있고 수정할 수 도 있다.
수정하고 싶으면 img[20,1000] = [0,0,0] 이렇게 지정해서 바꿀 수 있다. 해당 픽셀을 검정색으로 바꾸겠다는 뜻이다.
하지만 위 방법보단

itemset() 함수를 통해 바꾸는 것을 추천한다. (20, 1000)인 위치의 픽셀 값에서 Red 값을 100 으로 바꿨다.
numpy array에서 다뤘다시피 우리는 array를 나눌 수 있다. 그것을 통해 우리는 split(), merge()를 쓸 수 있다.
cv2.split(이미지 객체) : 이미지 객체의 해당된 b, g, r을 각각 분리한다.

대~충은 알겠는데 사실 저 행렬 값들이 정확히 뭘 뜻하는지 확 와닿진 않는다. 계속 봐야할 것 같다 ㅎ,,ㅎ

위의 두 개는 서로 같다. 그치만 첫번째 방법 split()보다 두번째 방법 Numpy slicing을 쓰는 게 더 효율적일 때도 있다.
cv2.merge((b,g,r)) : 각 b, g, r 값을 합쳐 이미지 객체에 저장할 수 있다.

np.full() 함수는 도화지를 만드는 것인데 이것에 대해서는 도형그리기에서 자세히 설명하겠다.
아무튼 (height, width, channel) 이니 1개의 채널을 가지고 오는데 모든 픽셀 값을 0으로 지정한 것이다.
그 채널을 blue 채널로 지정하겠다고 변수명도 blue_zero를 쓴 것이고
cv2.merge()로 (b,g,r)순에서 b값에 넣으면 green과 red만 존재하는 이미지가 된다.
이미지 ROI( Resion of Image)도 위와 같이 numpy slicing이라 쉬운데
내가 슬라이싱하는 부분을 지정해주느냐
마우스로 드래그하느냐에 따라 다르게 쓸 수 있다.
그것도 여기다 정리하려했는데 다음에 올려야지 ㅎㅎ
담엔 ROI와 이미지 기본 이진화= 임계점 에 대해서 정리하겠다.
사실 위의 내용을 완벽하게 이해하고 숙지하면 다음 것들은 쉽다.