카테고리 없음
[파이썬] 현재 픽셀 값을 numpy 배열의 이전 픽셀 값과 비교
행복을전해요
2021. 2. 21. 02:25
Here's one approach. Take an example image:
You didn't say where your orig_bin
came from, so I've used scipy.misc.imread
:
from scipy.misc import imread, imsave
img = imread('input.png')
First, create a mask for pixels that are different from the pixel above (this uses an idea from Bi Rico's answer):
up = (img[1:,1:] != img[:-1,1:]).any(axis=2)
imread
행 우선 순서로 이미지 를 로드하므로 첫 번째 NumPy 축은 세로 축입니다. 설명은 " 다차원 배열 인덱싱 순서 문제 "를 참조하십시오 .
마찬가지로 왼쪽 픽셀과 다른 픽셀에 대한 마스크를 만듭니다.
left = (img[1:,1:] != img[1:,:-1]).any(axis=2)
이들을 결합하여 위 또는 왼쪽 픽셀과 다른 픽셀에 대한 마스크를 얻습니다.
mask = numpy.zeros(img.shape[:2], dtype=bool)
mask[1:,1:] = left | up
올바른 크기의 검정 출력 이미지를 만듭니다. 그런 다음 마스크를 흰색으로 설정합니다.
output = numpy.zeros(img.shape)
output[mask] = (255, 255, 255)
imsave('output.png', output)
결과는 다음과 같습니다.
또는 색상을 반대 방향으로 바꾸려면 마스크를 반전하십시오.
output[~mask] = (255, 255, 255)
다음과 같은 것을 원합니다.
change = (pixels[1:, 1:] != pixels[1:, :-1]) | (pixels[1:, 1:] != pixels[:-1, 1:])
이진수 (True, False)가됩니다. 결과가 0/255가되도록하려면 255를 곱해야합니다. 또한 배열이 (x, y, 3)이면 마지막 차원에서 실행해야 할 수도 있습니다.
이 문제를 다시 던질 수있는 다른 방법이 있습니다. 예를 들어 [1, -1]을 사용하는 컨볼 루션을 사용하면 대부분의 방법을 얻을 수 있습니다.
출처
https://stackoverflow.com/questions/22079952