[PYTHON] Python : PIL은 단일 RGBA 색상을 대체합니다.
PYTHONPython : PIL은 단일 RGBA 색상을 대체합니다.
나는 이미이 질문을 살펴 봤다 : 그래서 질문과 알파 값을 포함하여 단일 색상을 대체하기위한 매우 유사한 기술을 구현하는 것 :
c = Image.open(f)
c = c.convert("RGBA")
w, h = c.size
cnt = 0
for px in c.getdata():
c.putpixel((int(cnt % w), int(cnt / w)), (255, 0, 0, px[3])) cnt += 1
그러나 이것은 매우 느립니다. 나는 interwebs에이 조리법을 밖으로 가지고 갔다, 그러나 그것을 지금까지는 성공을 사용하지 않았다 : 조리법
내가 뭘 하려는지는 하나의 색상, 흰색으로 구성된 다양한 PNG 이미지를 가져가는 것입니다. 각 픽셀은 100 % 흰색이며 알파 = 0을 비롯한 다양한 알파 값이 있습니다. 기본적으로 # ff0000 <00-ff>와 같이 이미지를 새로운 색상으로 색칠합니다. 그래서 내 시작과 결과 이미지는 왼쪽이 내 시작 이미지이고 오른쪽이 내 결말 이미지입니다 (참고 : 배경이 연한 회색으로 변경되어 실제로 투명 해지기 때문에 배경을 볼 수 있습니다. 왼쪽의 점들을 볼 수 있어야합니다.)
이 작업을 수행하는 더 좋은 방법은 무엇입니까?
해결법
-
==============================
1.numpy를 사용하면 PIL 이미지를 훨씬 빠르고 빠르게 조작 할 수 있습니다.
numpy를 사용하면 PIL 이미지를 훨씬 빠르고 빠르게 조작 할 수 있습니다.
예 :
import Image import numpy as np im = Image.open('test.png') im = im.convert('RGBA') data = np.array(im) # "data" is a height x width x 4 numpy array red, green, blue, alpha = data.T # Temporarily unpack the bands for readability # Replace white with red... (leaves alpha values alone...) white_areas = (red == 255) & (blue == 255) & (green == 255) data[..., :-1][white_areas.T] = (255, 0, 0) # Transpose back needed im2 = Image.fromarray(data) im2.show()
편집 : 그것은 천천히 월요일, 그래서 나는 몇 가지 예제를 추가 줄 알았는데 :
알파 값 만 남겨두고 있음을 보여주기 위해 알파 채널에 방사형 그래디언트가 적용된 예제 이미지 버전의 결과는 다음과 같습니다.
기발한:
결과:
-
==============================
2.이것을 시험해보십시오.이 샘플에서는 색상이 흰색이 아닌 경우 색상을 검정으로 설정합니다.
이것을 시험해보십시오.이 샘플에서는 색상이 흰색이 아닌 경우 색상을 검정으로 설정합니다.
#!/usr/bin/python from PIL import Image import sys img = Image.open(sys.argv[1]) img = img.convert("RGBA") pixdata = img.load() # Clean the background noise, if color != white, then set to black. for y in xrange(img.size[1]): for x in xrange(img.size[0]): if pixdata[x, y] == (255, 255, 255, 255): pixdata[x, y] = (0, 0, 0, 255)
김프에서 색상 선택 도구를 사용하여 색상을 흡수하고 rgba 색상을 볼 수 있습니다.
-
==============================
3.이미지 모듈에 대한 Pythonware PIL 온라인 서적 장에서는 putpixel ()이 느리고 인라인으로 속도를 높일 수 있다고 제안합니다. 또는 PIL 버전에 따라 load ()를 대신 사용하십시오.
이미지 모듈에 대한 Pythonware PIL 온라인 서적 장에서는 putpixel ()이 느리고 인라인으로 속도를 높일 수 있다고 제안합니다. 또는 PIL 버전에 따라 load ()를 대신 사용하십시오.
from https://stackoverflow.com/questions/3752476/python-pil-replace-a-single-rgba-color by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 로컬 컴퓨터 또는 웹 리소스에서 jupyter 노트북에 이미지 또는 그림을 포함시키는 방법? (0) | 2018.11.02 |
---|---|
[PYTHON] 헤 루쿠 산발적 인 높은 응답 시간 (0) | 2018.11.02 |
[PYTHON] 외부 변수에 액세스하는 람다 함수 [duplicate] (0) | 2018.11.02 |
[PYTHON] 파이썬 - 튜플 목록을 문자열로 변환 (0) | 2018.11.02 |
[PYTHON] subplots의 파이썬 xticks (0) | 2018.11.02 |