반응형
openCV는 기본적으로 이미지가 3차원 행렬로 생성 된다.
(grayscale일 때는 행과 열로만 구성)
image1.jpeg
1. image에 대한 기본 속성은 아래와 같이 확인할 수 있다.
1 2 3 4 5 6 7 8 9 | print(img.shape) # (669, 669, 3) # grayscale의 경우 행과 열만 retrun됨 print(img.size) # 1342683 print(img.dtype) # uint8 | cs |
2. image에 특정 pixel에 접근이 가능하다.
1 2 3 4 5 6 7 8 9 | px1 = img[1, 0] print(px1) #[101 166 172] # 1(행), 0(열)의 색값이 101(R), 166(G), 172(B)을 확인할 수 있다. #Blue만 확인하고 싶을 경우 b = img[1, 0, 2] print(b) #172 | cs |
2-1. 특정 pixel의 값을 변경하는 것 또한 가능하다.
1 2 | img [:100, :100] = [255, 255, 255] #값이 흰색으로 변경된다. | cs |
2-2. img.item으로도 접근이 가능하다
1 2 3 4 5 6 7 8 9 10 11 | print(img[99, 99]) #[255 255 255] #2를 통해서 blue에 접근이 가능하다. print(img.item(99, 99, 2)) #255 for i in range(100): for j in range(100): img.itemset((i, j, 2), 100) #r(255) g(255) b(100)으로 바뀐다. | cs |
ROI (Region of Image)
보통 이미지는 특정 pixel보다는 단위로 작업을 많이 하는데 이를 ROI라고 한다.
ROI는 보통 Numpy의 indexing을 이용한다.
1 2 3 4 5 6 7 8 9 10 11 12 | yellowBox = img[:100, :100] #plt.imshow(img) img2 = cv2.copyMakeBorder(img,0,0,0,0,cv2.BORDER_REPLICATE) img2[300:400, 300:400] = yellowBox plt.subplot(1, 2, 1) plt.title('original'), plt.imshow(img), plt.xticks([]), plt.yticks([]) plt.subplot(1, 2, 2) plt.title('add yellow box'), plt.imshow(img2), plt.xticks([]), plt.yticks([]) plt.show() | cs |
그냥
1 | img2 = img | cs |
이미지를 복사하는 방법
cv2.copyMakeBorder(src, tmp, bottom, left, right, borderType)
borderType 종류
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | original = cv2.imread('pic/image1.jpeg', cv2.IMREAD_COLOR) original = cv2.cvtColor(original, cv2.COLOR_BGR2RGB) same = cv2.copyMakeBorder(original,0,0,0,0,cv2.BORDER_REPLICATE) replicate = cv2.copyMakeBorder(original,150,50,50,50,cv2.BORDER_REPLICATE) reflect = cv2.copyMakeBorder(original,150,50,50,50,cv2.BORDER_REFLECT) wrap = cv2.copyMakeBorder(original,150,50,50,50,cv2.BORDER_WRAP) constant= cv2.copyMakeBorder(original,150,50,50,50,cv2.BORDER_CONSTANT,value=[0,0, 255]) images= [original, same, replicate, reflect, wrap, constant] titles = ['original', 'same', 'replicate', 'reflect', 'wrap', 'constant'] for i in range(len(images)): plt.subplot(2, 3, i+1), plt.title(titles[i]), plt.imshow(images[i]) plt.xticks([]), plt.yticks([]) plt.show() | cs |
반응형
'Project > 데이터 가지고 놀기' 카테고리의 다른 글
[서울시 도서관] 서울시 도서관 개수 시각화 (0) | 2018.07.11 |
---|---|
pixel-art :: openCV 기초 (4) - 이미지 임계처리 (1) | 2018.03.06 |
pixel-art :: openCV 기초 (3) - 이미지 연산 (0) | 2018.03.06 |
picel-art :: openCV 기초 (1) - 이미지를 불러오자 (0) | 2018.02.08 |
pixel-art :: 하고싶은 것 정의(1) (1) | 2018.02.07 |
댓글