2009年創業。埼玉県川越市一筋のIT企業です。
イー・レンジャー株式会社 電話
イー・レンジャー株式会社 > 障害のある男の子とのペア・プログラミング

障害のある男の子とのペア・プログラミング

最終更新日: 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]

←「」前の記事へ   次の記事へ「」→