히비스서커스의 블로그

[Numpy] numpy로 이미지 처리하기 3 본문

Programming/Python

[Numpy] numpy로 이미지 처리하기 3

HibisCircus 2021. 9. 9. 19:03
728x90

numpy로 각종 이미지 처리를 하며 numpy 기능들 정리들을 정리해보았다.

 

https://numpy.org/

 

축 관련

 

축(차원) 제거하기

numpy.squeeze(a, axis=None)

a라는 numpy 배열에서 축(차원)을 제거할 때 사용, 보통 shape을 찍었을 때 값이 1인 것만 제거가 가능

 

배열 추가하기

numpy.expand_dims(a, axis)

a라는 numpy 배열에서 축(차원)을 추가할 때 사용

 

관련된 예제 확인

https://numpy.org/doc/stable/reference/generated/numpy.squeeze.html

 

numpy.squeeze — NumPy v1.21 Manual

numpy.squeeze numpy.squeeze(a, axis=None)[source] Remove axes of length one from a. Parameters aarray_likeInput data. axisNone or int or tuple of ints, optional Selects a subset of the entries of length one in the shape. If an axis is selected with shape e

numpy.org

https://numpy.org/doc/stable/reference/generated/numpy.expand_dims.html

 

numpy.expand_dims — NumPy v1.21 Manual

Position in the expanded axes where the new axis (or axes) is placed. Deprecated since version 1.13.0: Passing an axis where axis > a.ndim will be treated as axis == a.ndim, and passing axis < -a.ndim - 1 will be treated as axis == 0. This behavior is depr

numpy.org

 

 

 

 

내부 원소 값들의 연산 관련

 

shape이 동일한 두 numpy 배열 값 연산

 

덧셈: add(x1 ,x2)

- 두 numpy 배열의 값이 더해진 새로운 numpy 배열을 만듦

 

뺄셈: subtract(x1, x2)

- 두 numpy 배열의 값을 뺀(x1에서 x2를 뺀) 새로운 numpy 배열을 만듦

 

예시

import matplotlib.pyplot as plt
import numpy as np
import cv2

mask1 = np.zeros((512, 512))
pts1 = [(25, 200), (72, 100), (486, 328), (295, 472)]
pts1 = [np.array(pts1, dtype=np.int32)]
test1 = cv2.fillPoly(mask1, pts1, 85)
plt.subplot(1, 4, 1)
plt.imshow(test1, cmap='gray', vmin=0, vmax=255)


mask2 = np.zeros((512, 512))
pts2 = [(200, 11), (200, 94), (300, 361), (400, 94)]
pts2 = [np.array(pts2, dtype=np.int32)]
test2 = cv2.fillPoly(mask2, pts2, 170)
plt.subplot(1, 4, 2)
plt.imshow(test2, cmap='gray', vmin=0, vmax=255)


add = np.add(mask1, mask2)
plt.subplot(1, 4, 3)
plt.imshow(add, cmap='gray', vmin=0, vmax=255)

subtract = np.subtract(mask1, mask2)
plt.subplot(1, 4, 4)
plt.imshow(subtract, cmap='gray', vmin=0, vmax=255)

 

결과

 

교집합: logical_and()

- 두 배열에서 둘 다 0이 아닌 부분을 True 나머지를 False로 한 새로운 numpy 배열을 만듦

 

배타적 논리합: logical_xor()

- 두 배열의 합집합에서 교집합인 부분을 제외한 부분만 True, 나머지를 False로 한 새로운 numpy 배열을 만듦

 

차집합: 배타적 논리합과 교집합을 이용하여 추출

- 두 배열에서 교집합을 제외한 한쪽만 추출한 부분을 True 나머지를 False로 새로운 numpy 배열을 만듦

 

코드

import matplotlib.pyplot as plt
import numpy as np
import cv2

plt.figure(figsize=(20, 5))

cap = np.logical_and(test1, test2)*255
plt.subplot(1, 4, 1)
plt.title('cap')
plt.imshow(cap, cmap='gray', vmin=0, vmax=255)


xor = np.logical_xor(test1, test2)
plt.subplot(1, 4, 2)
plt.title('xor')
plt.imshow(xor, cmap='gray', vmin=0, vmax=1)


cha1 = np.logical_xor(test1, cap)*85
plt.subplot(1, 4, 3)
plt.title('cha1')
plt.imshow(cha1, cmap='gray', vmin=0, vmax=255)


cha2 = np.logical_xor(test2, cap)*170
plt.subplot(1, 4, 4)
plt.title('cha2')
plt.imshow(cha2, cmap='gray', vmin=0, vmax=255)

 

결과

 

 

-히비스서커스-

728x90