[opencv-python] roi 및 속성, 채널
2019. 7. 2. 02:50ㆍPython-이론/python-opencv
이번에 해볼 것은 제목의 roi설정 뿐만 아니라 속성을 가져오고 채널을 분할하고 합치는 것을 해보겠습니다.
속성을 가져오기
코드
import numpy as np
import cv2
img = cv2.imread("../resource/Images/ipad.jpeg")
print(img.shape)
print(img.size)
print(img.dtype)
결과
이미지 ROI
이미지를 처리할 때 특정 영역에서 작업이 이루어지는 경우가 있습니다. 이럴 때 ROI를 사용하여 특정 구역을 인덱싱하여 사용할 수 있습니다.
코드
import numpy as np
import cv2
img = cv2.imread("../resource/Images/ipad.jpeg")
cv2.namedWindow('original', cv2.WINDOW_NORMAL)
cv2.imshow('original', img)
subImg = img[300:400, 350:750]
cv2.namedWindow('cutting', cv2.WINDOW_NORMAL)
cv2.imshow('cutting', subImg)
print(img.shape)
print(subImg.shape)
cv2.waitKey(0)
cv2.destroyAllWindows()
코드 설명
img[300:400, 350 : 750]
사용하여 x축 300에서 400까지 y축 350에서 750까지의 구역을 짤라서 보여 줄 수 있다.
결과
이미지 채널 분할 및 합치기
필요시 컬러 이미지의 경우 B, G, R을 채널 별로 픽셀값을 따로 분리해 놓을 수 있다. 그리고 분리한 b, g, r을 다시 합칠 수 도 있습니다.
색 분리 해주는 코드
import numpy as np
import cv2
img = cv2.imread("../resource/Images/ipad.jpeg")
b, g, r = cv2.split(img)
print(img[100, 100])
print(b[100, 100], g[100, 100], r[100, 100])
코드 설명
b, g, r = cv2.split(img)
split을 통해서 이미지의 bgr값을 분리할 수 있습니다. 예를 들어서 위의 코드처럼 b, g, r을 채널별로 나눌 수 있습니다.
결과
분리한 채널 보여주기
import numpy as np
import cv2
img = cv2.imread("../resource/Images/ipad.jpeg")
b, g, r = cv2.split(img)
def showImage(window, img):
cv2.namedWindow(window, cv2.WINDOW_NORMAL)
cv2.imshow(window, img)
showImage("original", img)
showImage("b", b)
showImage("g", g)
showImage("r", r)
cv2.waitKey(0)
cv2.destroyAllWindows()
분리된 채널의 값을 imshow에 넣어 주었습니다.
결과
분리한 채널을 다시 합치기 코드
mergeImage = cv2.merge((b, g, r))
showImage("merge", mergeImage)
merge 후 showImage에 배열과 window이름을 추가해주면 아래와 같이 원본 사진이 나온다.
결과
Appendix
split은 성능상으로 좋지 못하다 그래서 numpy inexing을 사용해주면 더 효율적으로 사용할 수 있다.
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
'Python-이론 > python-opencv' 카테고리의 다른 글
[opencv-python] 색공간 바꾸기 및 색 추적 (2) | 2019.07.04 |
---|---|
[opencv-python] 이미지 연산 처리를 이용한 합성 (0) | 2019.07.02 |
[opencv-python] 트랙바 만들기 (2) | 2019.07.02 |
[opencv-python] 도형 그리기 with 마우스 (0) | 2019.07.02 |
[opencv-python] 도형 그리기 (0) | 2019.07.01 |