障害のある男の子とのペア・プログラミング
最終更新日: 2017/06/27 2:57pm
こんにちは。経理の小高です。
昨年暮れのこと。知り合いの方から「子供の数値解析の課題を見てほしい」と頼まれました。息子さんは大学2年生。
小さい頃から知っている男の子で、小学生のときにアスペルガー症候群と診断されたと聞いていました。
理系の大学に入学して頑張っていて、数値解析の課題がわからない、とのこと。課題は「4次方程式の解をMuller法で求めよ」というものでした。自分も30年前に大学生だったころ、数値解析の課題がでるととても憂鬱な気分になったものです。
親御さんには「数値解析はコンピュータを始めたばかりの頃にはとても難しいものですよ」とお話して、息子さんと一緒に、実数解を得るところまでプログラミングしました。
先週のこと。彼から「師匠にご相談があります」というメールをもらいました。
来年4年生になった際に画像処理関連の研究室に入りたいのだが、そのためにプログラムを作っているのでチェックしてほしい、とのことでした。
自分で選んだ課題は画像にモザイクをかけるというプログラム。
「では、週末にあいましょう」といって、私もプログラムを準備して週末に会いました。python3とopencv製。
当日は、図らずも喫茶店でjupyter notebookを使ってのペアプログラミングになりました。
そして無事完了。
私の用意したプログラムは無駄になってしまったので、以下に掲載します。
test.jpgとして元画像を同じフォルダーに保管し、M_SIZEでモザイクの大きさを指定します。
[python]
# モザイクを生成する
#
import matplotlib.pyplot as plt
import numpy as np
import cv2
import os
# 元画像
IN_FILE = ‘test.jpg’
# モザイク画像
OUT_FILE = ‘test_{0}.jpg’
# モザイクの大きさ
M_SIZE = 50
def main():
# 画像の読み込み
img = cv2.imread(IN_FILE)
# BGRからRGBへ変換
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 高さと幅の取得
height, width, _ = img.shape[:3]
# 書き出し用ワーク
r_img = np.zeros_like(img)
for i in range(0, height, M_SIZE):
e_idx = (i + M_SIZE) if (i + M_SIZE) < height else height
for j in range(0, width, M_SIZE):
e_idxj = (j + M_SIZE) if (j + M_SIZE) < width else width
# Rの平均
r_mean = int(img[i:e_idx, j:e_idxj, 0].mean())
# Rの平均値を書き出し用ワークにコピー
r_list = [[r_mean for k in range(e_idxj-j)] for l in range(e_idx-i)]
r_img[i:e_idx, j:e_idxj, 0] = np.array(r_list, dtype=np.int32)
# Gの平均
g_mean = int(img[i:e_idx, j:e_idxj, 1].mean())
# Gの平均値を書き出し用ワークにコピー
g_list = [[g_mean for k in range(e_idxj-j)] for l in range(e_idx-i)]
r_img[i:e_idx, j:e_idxj, 1] = np.array(g_list, dtype=np.int32)
# Bの平均
b_mean = int(img[i:e_idx, j:e_idxj, 2].mean())
# Bの平均値を書き出し用ワークにコピー
b_list = [[b_mean for k in range(e_idxj-j)] for l in range(e_idx-i)]
r_img[i:e_idx, j:e_idxj, 2] = np.array(b_list, dtype=np.int32)
# RGBからBGRに変換
r_img = cv2.cvtColor(r_img, cv2.COLOR_RGB2BGR)
# 書き出し
cv2.imwrite(OUT_FILE.format(str(M_SIZE)), r_img)
if __name__ == ‘__main__’:
main()
[/python]