SJS2017 ex03

課題いっぱいありますが,1回で全部終わらせようという意図ではありません. 自分で進められるひとはどんどん先へ進めたらよいですが.

これまでの分

課題A

Python + OpenCV 入門

step1 プログラムを書く

#gist(f4f1a5309d145883c9a3)

step2 実行する

まず,右の画像を手元に保存します. 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

Python + OpenCV 入門(2)

上記のプログラムを次のように変更しよう

  1. 画像の向きの反転のかわりに,画素値の反転をさせた画像を作り,それを表示&出力する.ヒント: OpenCV+Python では画素値を Numpy の array に格納します.それがわかれば 255 から引くだけなので1行で書けます.
  2. 元の画像と,それを上下反転させた画像の平均(両者を足して2で割る)を作り,それを表示したり出力する.
    • まずは単純に足して2で割ってみよう.うまくいかず化け猫がでてくるはず.
    • うまくいかない理由を考えよう.たとえば img の内容を表示させてみると
      In [2]: img
      Out[2]: 
      array([[[161, 143, 142],
      中略
              [160, 152, 152]]], dtype=uint8)
      
      となっていて,dtype が uint8 となっている.これが怪しい.
  3. 元の画像と,それを上下反転させた画像の平均をちゃんと作れるようにしよう.
    • 画素値の入っている np.array の dtype を 変えるのがよいだろう.ヒント:
      In [1]: x = np.array([0,100,200], dtype=np.uint8)
      
      In [2]: x
      Out[2]: array([0, 100,  200], dtype=uint8)
      
      In [6]: x.dtype
      Out[6]: dtype('uint8')
      
      In [7]: y = np.array([100,100,100], dtype=np.uint8)
      
      In [8]: z = x + y
      
      In [9]: z
      Out[9]: array([100, 200,  44], dtype=uint8)
      
      In [10]: zz = x.astype(float) + y
      
      In [11]: zz
      Out[11]: array([ 100.,  200.,  300.])
      
      In [12]: zz = (x.astype(float) + y)/2
      
      In [13]: zz
      Out[13]: array([  50.,  100.,  150.])
      
      In [14]: zz.astype(np.uint8)
      Out[14]: array([ 50, 100, 150], dtype=uint8)
      

課題C

Python + OpenCV 入門(3)

適当な画像に適当な処理を施すプログラムを作りなさい.ただし,画像の拡大と縮小をする処理を必ず入れること.


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS