카테고리 없음

[파이썬] 현재 픽셀 값을 numpy 배열의 이전 픽셀 값과 비교

행복을전해요 2021. 2. 21. 02:25

Here's one approach. Take an example image:

Martin Newell의 Utah 찻 주전자 모델 렌더링

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