楽天エリアマップ2カ月以降のエリア色変更

import cv2
import numpy as np
from google.colab.patches import cv2_imshow
from PIL import Image
from staticmap import StaticMap


def get_map(
    url, lat=33.84167, lng=132.76611, width=2000, height=2000, zoom=12, fn="map.png"
):

    smap = StaticMap(width, height, url_template=url)

    img = smap.render(zoom=zoom, center=[lng, lat])

    img.save(fn)


def bgr_mask(img, bgr):

    bgrLower = np.array(bgr)
    bgrUpper = np.array(bgr)

    img_mask = cv2.inRange(img, bgrLower, bgrUpper)

    return img_mask


lat, lng, zoom = 34.0663192, 132.9975244, 14

kokudo = "https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png"
rakuten2m = "https://gateway-api.global.rakuten.com/dsd/geoserver/4g2m/mno_coverage_map/gwc/service/gmaps?LAYERS=mno_coverage_map:all_map&FORMAT=image/png&TRANSPARENT=TRUE&x={x}&y={y}&zoom={z}"
rakuten4m = "https://gateway-api.global.rakuten.com/dsd/geoserver/4g4m/mno_coverage_map/gwc/service/gmaps?LAYERS=mno_coverage_map:all_map&FORMAT=image/png&TRANSPARENT=TRUE&x={x}&y={y}&zoom={z}"

get_map(kokudo, lat=lat, lng=lng, zoom=zoom, width=2000, height=2000, fn="map.png")

get_map(
    rakuten2m, lat=lat, lng=lng, zoom=zoom, width=2000, height=2000, fn="area2m.png"
)
get_map(
    rakuten4m, lat=lat, lng=lng, zoom=zoom, width=2000, height=2000, fn="area4m.png"
)

srcmap = cv2.imread("map.png")

src2m = cv2.imread("area2m.png")
src4m = cv2.imread("area4m.png")

"""
# エリア
[186, 102, 255]

# 拡大予定エリア
[221, 128, 196]

# パートナー
[215, 166, 255]
"""

mask2m = bgr_mask(src2m, [221, 128, 196])
mask4m = bgr_mask(src4m, [221, 128, 196])

masknow = bgr_mask(src2m, [186, 102, 255])
maskau = bgr_mask(src2m, [215, 166, 255])

# 現在のエリアと拡大エリアを合体
mask = cv2.bitwise_or(masknow, mask4m)

# パートナーエリアを除去
area_now = cv2.bitwise_and(src4m, src4m, mask=mask)

# エリア外を黒から白
area_now[mask == 0] = [255, 255, 255]

# 拡大エリアの2カ月と4カ月の差分
mask4mnew = cv2.bitwise_xor(mask2m, mask4m)

# 拡大エリアの4カ月のみ色変更
area_now[mask4mnew == 255] = [0, 0, 128]

cv2_imshow(area_now)

# bitwise_and
area = cv2.bitwise_and(srcmap, area_now)
cv2.imwrite("cv2and.png", area)

cv2_imshow(area)

# addWeighted
area = cv2.addWeighted(srcmap, 0.3, area_now, 0.7, 0)
cv2.imwrite("cv2add.png", area)

cv2_imshow(area)

# pillow
area = cv2.cvtColor(area_now, cv2.COLOR_BGR2BGRA)

area[:, :, 3] = np.where(mask == 0, 0, 160)

cv2_imshow(area)

cv2.imwrite("dst.png", area)

im_map = Image.open("map.png")

im_area = Image.open("dst.png")

im_map.putalpha(255)

# im_area.putalpha(160)

im_raku = Image.alpha_composite(im_map, im_area)

im_raku.save("rakuten.png")