- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2017-09-24T18:11:49+09:00","default:takataka","takataka")
#author("2017-10-11T10:38:37+09:00","default:takataka","takataka")
*SJS2017 ex03 [#f69bd8f1]
課題いっぱいありますが,1回で全部終わらせようという意図ではありません.
自分で進められるひとはどんどん先へ進めたらよいですが.
#contents
**これまでの分 [#kbc5dcd1]
- 以前の分を全て報告してokをもらってから,今回分にすすみましょう.
**課題A [#w83b99ab]
**準備 [#xbd365c4]
Python + OpenCV 入門
今日の課題では,以下の画像を使います.ダウンロードして notebook と同じディレクトリ内に置いときましょう.
***step1 プログラムを書く [#dd5c8e25]
#gist(f4f1a5309d145883c9a3)
***step2 実行する [#n96ed989]
まず,右の画像を手元に保存します.
&ref(SJS/blackuni3.png);
そして,次のようにプログラムを実行します.
$ python displayimage.py
hoge.png という画像ができてるので,眺めます
画像を開いて眺めるには,次のどちらかを実行しましょう.
$ open hoge.png 注1: 以下参照
$ display hoge.png & 注2: ImageMagick の display コマンドを使う場合
注1: open は Mac OS X 独自のコマンド.関連づけられているアプリケーションに渡して実行.デフォルトでは「プレビュー」が開く.
OpenCV に関する情報は,http://docs.opencv.org/3.3.0/ などへどうぞ.または,「opencv python ほげ」等でググるのもよいでしょう.
**課題B [#e4ff231e]
Python + OpenCV 入門(2)
**課題A [#w83b99ab]
&gist(54dba630c2c100ccd78667574d7c96ff);
上記のプログラムを次のように変更しよう
+ 画像の向きの反転のかわりに,画素値の反転をさせた画像を作り,それを表示&出力する.ヒント: OpenCV+Python では画素値を Numpy の array に格納します.それがわかれば 255 から引くだけなので1行で書けます.
+ 元の画像と,それを上下反転させた画像の平均(両者を足して2で割る)を作り,それを表示したり出力する.
--まずは単純に足して2で割ってみよう.うまくいかず化け猫がでてくるはず.
--うまくいかない理由を考えよう.たとえば img の内容を表示させてみると
#pre{{
In [2]: img
Out[2]:
array([[[161, 143, 142],
中略
[160, 152, 152]]], dtype=uint8)
}}
となっていて,dtype が uint8 となっている.これが怪しい.
+元の画像と,それを上下反転させた画像の平均をちゃんと作れるようにしよう.
-- 画素値の入っている np.array の dtype を 変えるのがよいだろう.ヒント:
#pre{{
In [1]: x = np.array([1,2,3])
In [2]: x.dtype
Out[2]: dtype('int64')
**課題B [#e4ff231e]
In [3]: y = np.array([4,5,6])
In [4]: z = (x + y)/2
Python + OpenCV 入門(2)
In [5]: z
Out[5]: array([2, 3, 4])
#pre{{
import numpy as np
import cv2
In [6]: z.dtype
Out[6]: dtype('int64')
cap = cv2.VideoCapture(0)
In [7]: x.astype(float).dtype
Out[7]: dtype('float64')
In [8]: z = (x.astype(float) + y)/2
In [9]: z
Out[9]: array([ 2.5, 3.5, 4.5])
In [10]: z.dtype
Out[10]: dtype('float64')
while True:
rv, frame = cap.read()
cv2.imshow('hoge', frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
}}
**課題C [#x74aa91c]
上記を適当な名前のファイルとして保存して(e.g. ex03B.py),次のように実行してみよう
$ python ex03B.py
Python + OpenCV 入門(3)
画像の映ったウィンドウ内で 'q' を押すとこのプログラムは終了する.これを元にして,適当に画像処理するプログラムを作りなさい.
適当な画像に適当な処理を施すプログラムを作りなさい.ただし,画像の拡大と縮小をする処理を必ず入れること.