2017-12-06 4 views
1

색상이 거의없는 이미지가 있습니다. (최대 5 개의 다른 색이 있으며 모두 구별됩니다.)PIL은 색상 영역 사이의 색상 혼합을 제거합니다.

색 사이의 영역 경계에는이 색들 사이에 혼합 된 (일반적으로 단일 픽셀 너비의) 선이 있습니다. 어떻게 제거 할 수 있습니까?

어쨌든 numpy 배열로 조작 할 수 있으므로 numpy 배열을 사용하면이 작업을 수행 할 수 있습니다. 예를 들어

,이 화상이 배열되어

10*10 white, 1*10 (.25, .25, .25) and 10*10 black

: I는 변환 함수를 원하는

image = np.append(
    np.append(np.ones((10, 10, 3)), np.ones((1, 10, 3))/5., axis=0), 
    np.zeros((10, 10, 3)), axis=0 
) 

# Or a 10 * 10 white (0, 0, 0) region with a 1 * 10 line of (0.2, 0.2, 0.2) pixels 
# underneath and a 10 * 10 black (1, 1, 1) region underneath that. 

# Expected result: 
expected = np.append(np.ones((10, 10, 3)), np.zeros((11, 10, 3)), axis=0) 

그 블랙으로 회색 픽셀들의 1 × 10 행 그것이 검은 색에 가깝기 때문에.

+0

어떻게 경계를 정의 하시겠습니까? 당신이 그걸 어떻게 찾았나요? – Divakar

+0

@Divakar 주요 색상이 아니지만 이미지의 주요 색상 근처에 나타나는 작은 얇은 영역. – Artyer

답변

2

Image.quantize을 사용하면 모든 색상이 팔레트와 일치하도록 할 수 있습니다. 그러면 이미지 모드가 P으로 변경되고 완료되면 RGB으로 다시 변환됩니다.

+0

"주요 색상"을 계산하려면 ['Image.getcolors'] (http://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.Image.getcolors)와 함께 사용하십시오. 완벽하게 작동합니다. 감사! – Artyer

관련 문제