[OpenCV-python 기초]:이미지 픽셀 조작 및 ROI(관심영역)

2018. 5. 30. 14:41Python-이론/python-opencv

OpenCV:이미지 픽셀 조작 및 ROI(관심영역)



roi(관심영역)이란 자기가 지금 작업하려는 특정구역을 뜻합니다.


한구역의 픽셀값 얻어오기
import cv2

img = cv2.imread('images/ironMan.PNG')
print(img[155,15])


위의 픽셀값을 img[155,15] = [0,0,0]의 형태로 변형가능하다. 하지만 이같은 방법은 성능상에서 문제를 발생시킬 수 있다. 그래서 우리는 img.item을 사용하겠다



import cv2

img = cv2.imread('images/ironMan.PNG')

#첫인자 두번째인자는 픽셀값 세번째 인자는 0 파란색, 1 초록색, 2 빨간색
#img.itemset((120,150,0), 100)
B = img.item(120,150,0)
G = img.item(120, 150, 1)
R = img.item(120, 150, 2)

RGB = [R,G,B]
print(RGB)


이미지 속성 얻기
import cv2

img = cv2.imread('images/ironMan.PNG')

#첫인자 두번째인자는 픽셀값 세번째 인자는 0 파란색, 1 초록색, 2 빨간색


print('이미지 height:',img.shape[0], '이미지 width:',img.shape[1],'이미지 channel수:',img.shape[2])
print(img.size) #byte
print(img.dtype)#이미지 데이터 타입


ROI 지정하고 이미지 변형시키기


import cv2

img = cv2.imread('images/ironMan.PNG')

cuttingImg = img[100:400, 100:400]

cv2.imshow('original', img)
cv2.imshow('cuttingImg', cuttingImg)
img[0:300,0:300] = splitImg
cv2.imshow('modified', img)
cv2.waitKey(0)
cv2.destroyAllWindows()




이미지 채널합치기

import cv2
import numpy 

import cv2

img = cv2.imread('images/ironMan.PNG')

#분리하기
B, G, R = cv2.split(img)

cv2.imshow('B', B) #파란색만 적용
cv2.imshow('G', G) #초록색만 적용
cv2.imshow('R', R) #빨간색만 적용

#합치기
BGR = cv2.merge((B, G, R))
cv2.imshow('merge',BGR)

cv2.waitKey(0)
cv2.destroyAllWindows()




이미지를 분리하는데 split을 사용했지만 성능상에서 좋지 못하다. 따라서 아래의 방법을 사용해서 구분하는 것이 좋다.



import cv2

img = cv2.imread('images/ironMan.PNG')

#분리하기
B = img[:,:,0]
G = img[:,:,1]
R = img[:,:,2]