내 Voi 스쿠터는 어디에 있나요: [9] Python PIL 모듈을 사용하여 맵에서 스쿠터 히트맵 마스킹
3466 단어 datasciencepythonvoiprogramming
히트맵
겹치는 이미지
지도의 이미지와 히트맵을 겹치기 위해서는 다른 이미지 위에 반투명한 이미지를 얹는 방법을 찾아야 합니다.
먼저 이미지를 투명하게 만들어야 합니다.
putalpha(128)
를 사용하여 이미지를 반투명하게 만듭니다. 해당 이미지에 알파 또는 투명도 수준 128을 적용하여 작동합니다. 알파 레벨 0은 완전히 투명함을 의미하고 레벨 255는 완전히 불투명함을 의미합니다. 따라서 128은 중간에 있으므로 반투명합니다.그런 다음
image.paste(another_image)
를 사용하여 반투명 이미지를 다른 이미지 위에 올려 보았습니다. 하지만 일어난 일은 이미지 전체가 다른 이미지를 덮어쓴다는 것입니다. 내가 필요한 것은 alpha_composite
. 테스트를 위해 나는 sat 위에 반투명 맵을 합성했습니다.히트맵 범위에 사용한 4개의 좌표를 가져와서 이것을 생성했습니다
map_img
. 정확히 네 모서리로 스크린샷을 찍습니다.sat_map
from PIL import Image
map_img = Image.open('img/map.png')
map_img.putalpha(128)
sat_map = Image.open('img/sat_map.png')
sat_map.alpha_composite(map_img)
sat_map.save('img/result.png')
result.png
마스킹
이제 지도에서 스쿠터가 많은 지역을 볼 수 있도록 지도 이미지에서 히트맵 이미지를 마스킹하고 싶습니다. 마지막 예제처럼 알파 컴포지트를 사용하고 싶었지만 마스킹을 사용하는 것이 더 나을 것 같았습니다. 이미지 마스킹은 이미지 C를 가이드라인으로 사용하여 이미지 B에 이미지 A를 배치하는 것입니다. 히트맵을 가이드라인으로 삼아 지도 위에 어두운 이미지를 배치할 계획입니다. 더 많은 스쿠터가 있는 장소는 지도에서 스쿠터가 어디에 있는지 알 수 있도록 더 어두워집니다.
마스킹을 수행하는 기능은
Image.composite()
이며 모든 이미지의 크기가 동일해야 합니다. 그래서 저는 가로 600 세로 600 크기를 모두 사용할 계획입니다. 먼저 전체 흰색의 배경 이미지를 만들고 thumbnail
함수를 사용하여 지도 이미지를 히트맵 크기로 조정한 다음 배경에 붙여넣습니다. 그런 다음 히트맵 이미지를 읽고 크기를 수정한 다음 어떤 이유로 회색조를 의미하는 L
로 변환합니다. 그런 다음 모든 빨간색의 빨간색 이미지를 만들고 모두 함께 합성합니다.bg_img = Image.new("RGBA", (600, 600), 0)
map_img = Image.open('img/map.png')
map_img.thumbnail((474, 546), Image.ANTIALIAS)
bg_img.paste(map_img, (36, 21))
heatmap_img = Image.open('img/heatmap.png').resize((600, 600)).convert("L")
bk_img = Image.new("RGB", (600, 600), 255).convert("RGBA")
final_img = Image.composite(bk_img, bg_img, heatmap_img)
final_img.save('img/result2.png')
heatmap_img
그 결과 스쿠터가 더 많은 장소에 빨간색 오버레이가 표시되어 스쿠터가 어디에 집중되어 있는지 알 수 있습니다.
무엇 향후 계획
다음 블로그에서는 데이터 수집 프로그램이 이미 한 달 이상 실행되었기 때문에 7월부터 Voi 스쿠터 데이터를 분석할 계획입니다. 흥미로운 데이터가 수집될 것이라고 확신합니다.
Reference
이 문제에 관하여(내 Voi 스쿠터는 어디에 있나요: [9] Python PIL 모듈을 사용하여 맵에서 스쿠터 히트맵 마스킹), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chits_programming_blog/wheres-my-voi-scooter-9-masking-scooter-heatmap-on-the-map-using-python-pil-module-19jl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)