第1回 Python教室

関連サイトと資料

Anacondaのインストール

  1. 「関連サイトと資料」にある「Anaconda ダウンロードサイト」から、Anaconda2(64-bit)の最新版(2018/06/06現在では、Anaconda2-5.2.0-Windows-x86_64.exe)をダウンロードして、インストールを行う。インストールの途中でコマンドプロンプトのWindow(黒いWindow)が出てくるが、勝手に閉じないように!閉じるとインストールに失敗します。

OpenCV3 for Pythonのインストール法

  1. https://pypi.org/project/opencv-python/#files から、必要なファイルをダウンロードする。




  2. ダウンロード先がデスクトップだと仮定する。エクスプローラを起動して、左側のペインで「デスクトップ」を選択する。




  3. メニュー「ファイル」−「Windows PowerShellを開く」を選択する。




  4. PowerShellのWindowが表示されるので、コマンド「pip install opencv_python-3.4.0.14-cp27-cp27m-win_amd64.whl」を入力して実行する。


インストールされているPillowのバージョン確認

  1. インストールされているPillowのバージョンを確認するためにPowerShellのWindowを表示し、コマンド「pip list」を入力して実行する。




  2. 適当にスクロールするとPillowの項目が見つかる。




  3. https://pypi.org/project/Pillow/#files にアクセスして、最新バージョンと比較する。




Spyderによるプログラムの作成と実行

  1. メニュー「スタート」-「Anaconda2(64-bit)」-「Spyder」を選択する。
  2. 以下の図のように、Spyderが起動する。
  3. 左側のペインにプログラムを入力し、ファイル名をつけて保存する。そして、メニューの下にあるオーディオの再生機能のアイコンをクリックすると、実行される。

Pillowを用いたアニメーションgifの作成

アニメーションgif1.py
# -*- coding: utf-8 -*-
"""
Created on Thu Jun  7 06:30:22 2018

@author: yama
"""
	
from PIL import Image, ImageDraw
	
images = []
	
width = 200
center = width // 2
color_1 = (0, 0, 0)
color_2 = (255, 255, 255)
max_radius = int(center * 1.5)
step = 8
	
for i in range(0, max_radius, step):
    im = Image.new('RGB', (width, width), color_1)
    draw = ImageDraw.Draw(im)
    draw.ellipse((center - i, center - i, center + i, center + i), fill=color_2)
    images.append(im)
	
for i in range(0, max_radius, step):
    im = Image.new('RGB', (width, width), color_2)
    draw = ImageDraw.Draw(im)
    draw.ellipse((center - i, center - i, center + i, center + i), fill=color_1)
    images.append(im)
	
images[0].save('a1.gif', save_all=True, append_images=images[1:], optimize=False, duration=40, loop=0)

アニメーションgif2.py
# -*- coding: utf-8 -*-
"""
Created on Wed May 30 12:02:03 2018

@author: yama
"""
	
from PIL import Image, ImageDraw
	
images = []
	
width = 200
height = 300
center = width // 2
color_1 = (255, 0, 0)
color_2 = (0, 255, 0)
max_radius = int(center * 1.5)
step = 8
	
for i in range(0, max_radius, step):
    im = Image.new('RGB', (width, height), color_1)
    draw = ImageDraw.Draw(im)
    draw.ellipse((center - i, center - i, center + i, center + i), fill=color_2)
    images.append(im)
	
for i in range(0, max_radius, step):
    im = Image.new('RGB', (width, height), color_2)
    draw = ImageDraw.Draw(im)
    draw.ellipse((center - i, center - i, center + i, center + i), fill=color_1)
    images.append(im)
	
images[0].save('a2.gif', save_all=True, append_images=images[1:], optimize=False, duration=40, loop=0)

OpenCVによる画像の読み込みと表示

以下のプログラムを実際に動かしてみよう。

画像読み込みと表示.py
# -*- coding: utf8 -*-
"""
Created on Wed Nov 08 11:47:06 2017

@author: yama
"""
	
import cv2
	
filename = 'sample1.jpg'
img = cv2.imread(filename, cv2.IMREAD_UNCHANGED)
cv2.imshow("Original Image", img)
	
cv2.waitKey(0)
cv2.destroyAllWindows()

処理対象ファイルは以下の「sample1.jpg」とする。

OpenCVによる画像生成

以下のプログラムを実際に動かしてみよう。

日の丸の作成.py
# -*- coding: utf8 -*-
"""
Created on Wed Nov 08 12:22:34 2017

@author: yama
"""
	
import numpy as np
import cv2
import math
	
width = 640
height = 480
	
# イメージ生成
img = np.zeros((height, width, 3), np.uint8)
	
# 処理
cx = width/2
cy = height/2
for y in range(height):
	for x in range(width):
		dx = x - cx
		dy = y - cy
		if math.sqrt(dx * dx + dy * dy) <= 150:
			img[y, x] = [0, 0, 255]
		else:
			img[y, x] = [255, 255, 255]
	
# ファイルに保存
cv2.imwrite('JapanFlag.png', img)
	
# 表示
cv2.imshow('Result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

JapanFlag.png

OpenCVによる既存画像の読み込みと各ピクセルへのアクセス

以下のプログラムを実際に動かしてみよう。

既存画像の読み込み1.py
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 10 16:11:50 2017

@author: yama
"""
	
import cv2
	
# 画像の読み込み
img = cv2.imread('JapanFlag.png', cv2.IMREAD_UNCHANGED)
	
height, width, c = img.shape
	
print('width = {0}, height = {1}, c = {2}'.format(width, height, c))

JapanFlag.png

この結果を使って、画像の各ピクセルにアクセスして赤色のピクセル数を数えてみる。

既存画像の読み込み2.py
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 11 17:07:51 2017

@author: yama
"""
	
import cv2
	
# 画像の読み込み
img = cv2.imread('JapanFlag.png', cv2.IMREAD_UNCHANGED)
	
height, width, c = img.shape
	
count = 0
for y in range(height):
	for x in range(width):
		if img[y,x,0] == 0 and img[y,x,1] == 0 and img[y,x,2] == 255:
			count += 1
	
print('全{0}ピクセル中、赤いピクセルは{1}ピクセルでした!'.format(width * height, count))