본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

 

 

 

 

opencv로 처리한 이미지에서 검은색 배경을 없애고 싶었다.

검색 결과 아래와 같은 코드로 처리할 수 있었다.

 

import numpy as np
import matplotlib.pyplot as plt


image = plt.imread('example.png')
plt.imshow(image)
plt.show()

 


image_copy = image.copy()

black_pixels_mask = np.all(image == [0, 0, 0], axis=-1)

non_black_pixels_mask = np.any(image != [0, 0, 0], axis=-1)  
# or non_black_pixels_mask = ~black_pixels_mask

image_copy[black_pixels_mask] = [255, 255, 255]
image_copy[non_black_pixels_mask] = [0, 0, 0]

plt.imshow(image_copy)
plt.show()

 

 

 

즉, 검은색 픽셀 마스크만 따오고 싶을 때는 np.all(image == [0, 0, 0], axis=-1) 를 사용한다.

그리고 해당 마스크를 이용해서 기존 이미지를 덮어주면 된다.

 

 

위에서 사용한 np.all 과 np.any는 여기 정리했다.

2019/12/18 - [AI/PyTorch] - [numpy] .all() , .any()

 

 

위와 같이 마스크로 걸러내면 가로세로 크기는 기존이미지의 것과 동일하지만 dimension이 없어진다.

즉, RGB 채널이 없어지고 1차원으로 true or false 만 나타낸다.

 

요런식으로~

 

 

 

출처 : https://stackoverflow.com/questions/52735231/how-to-select-all-non-black-pixels-in-a-numpy-array