切れ散らかしました。
それは先ほど例の10万円支給を受け取るためにマイナンバーカードのウェブ申請で顔写真をあげようとした時のこと。
証明写真機でとってきた写真が「ピクセル数が足りない」と言われてアップデートできないわけです。
「これはわざわざ仕様を満たす証明写真機を探しに周らないとあかんのか?」
「いや、ちょっとピクセル数が足りないだけならほんのちょっと画像をいじれば通せるんじゃないか?」
ピクセル数をちょろまかそう
とりあえず読み込む。
import cv2
import numpy as np
import matplotlib.pyplot as plt
filename = 'image.png'
# 読み込み
img = cv2.imread(filename)
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
rgb.shape
で証明写真のピクセル数を見てみると(600, 450, 3)
であり、要求される最低ピクセル数は600 x 480
であるため横方向に30px
の余白をつけてあげればいいことが分かります。
余白の色は白黒だと怒られそうなので背景色に合わせておきます。
back_color = rgb[0,0] # (x:0,y:0)のピクセルを背景色として取得
extension = np.full((600, 15, 3), back_color) # 背景色で塗った(縦600,横15,RGBの3チャンネル)の余白を作る
processed_img = np.hstack((extension, rgb, extension)) # 余白を元画像の左右にくっつける
最後に、拡張子は仕様に合わせてjpegで保存。
bgr = cv2.cvtColor(processed_img, cv2.COLOR_RGB2BGR)
cv2.imwrite('processed.jpg', bgr)
申請は通ったのか
ひとまずweb上でのアップロードは通りました。
この後に人手でチェックが入るでしょうから、
そこでこの左右の余白が許されたのかは分かり次第追記します。