- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2020-10-26T21:01:44+09:00","default:takataka","takataka")
#author("2020-11-02T18:26:59+09:00","default:takataka","takataka")
* 応用プログラミング及び実習 2020年度 ex05 [#xa9b83a6]
//&color(red){''工事中''};
#contentsx
** ex05A [#kadaiA]
[[ex05kadaiA.ipynb>https://gist.github.com/69e48cac7cc215031c36f7729eecb208]]
+ 上記のリンク先から notebook ファイルをダウンロードして開く
-- リンク先の画面右の方の「Raw」を ''右'' クリックして「リンク先を別名で保存」とかそんなん
+ そこに記された指示にしたがって notebook を編集して保存
+ その notebook ファイルを以下の提出場所へ提出
提出場所: [[この授業のMoodleコース>https://moodle.media.ryukoku.ac.jp/course/view.php?id=2278]] の [[ex05A>https://moodle.media.ryukoku.ac.jp/mod/assign/view.php?id=71984]]
** ex05B [#kadaiB]
ex05A のつづきで,文字列を入力したら単語内の文字をひっくり返して出力してくれるプログラムを作りましょう.
名前は ex05reverse.py としてください(''名前間違えないように'').
*** step1 [#u5a410d8]
次のような関数 reverseSentence() の定義を書いて,動作確認しよう.
- 関数名は reverseSentence
- 引数は1つ(文字列),戻り値は文字列
- 実行例(1)
S1 = " ぼく ほげお \tほげ ほげ〜\n"
R1 = reverseSentence(S1)
print(R1)
くぼ おげほ げほ 〜げほ
- 実行例(2)
print(reverseSentence("sihT si a .nep"))
This is a pen.
- ヒント: 部分文字列ごとにひっくりがえす.「ex05 Notebook その3」思い出そう.
*** step2 [#l0f62b73]
プログラムの末尾に,次のようなコードを挿入して実行しよう.読み込むファイルはこちら: [[ex05msg.txt>AProg:ex05msg.txt]]
#pre{{
fn = "ex05msg.txt"
with open(fn, "r", encoding="utf-8") as f: # ファイル名 fn のファイルを読み込みモードで開く
for line in f: # ファイルから1行ずつ読み込んでループ
print(line) # そのまま表示
}}
上記の for 文の中を修正して,読み込んだファイルの各行に reverseSentence() を適用した結果を出力するようにしてください.
//&size(8){なんかのりでほげおに新たな設定が爆誕...};
*** step3 [#p8f8df2e]
プログラムの末尾に次のコードを追加し,文字列を自分の情報に書き換えて動作確認しましょう.
確認できたら,提出しましょう.
#pre{{
myID = "A01055 ほげ ほげお" # 学籍番号,姓,名を空白区切りで
print(reverseSentence(reverseSentence(myID))
print(reverseSentence(reverseSentence(myID)))
}}
提出場所: [[この授業のMoodleコース>https://moodle.media.ryukoku.ac.jp/course/view.php?id=2278]] の [[ex05B>https://moodle.media.ryukoku.ac.jp/mod/assign/view.php?id=71985]]
**ex05S (omake) [#kadaiS]
//&color(#ff0000){工事中};
&color(red){''これはおまけ課題です.やらなくても減点はありません.やったら棒茄子?''};
- 以下の説明にしたがって作ったプログラムのファイルを提出してください
- 提出場所: Classroom 上の [[こちら>https://classroom.google.com/c/MTYxODQ4NzczNzgy/a/MTkwNjMyNjYzODk5/details]] (ファイルをここに提出したら,Teams のチャットで知らせてね)
- 期限: 1103火の授業終了時
//&color(#ff0000){工事中};
''画像処理してみよう''
&ref(http://www-tlab.math.ryukoku.ac.jp/~takataka/course/AProg/blackuni3.png,nolink);
+ 以下では OpenCV という,''コンピュータビジョン''(コンピュータに人間のような視覚をもたせる方法を考える研究開発分野)のためのライブラリを利用します.次のようにしてインストールしてください(macのひとはpip3).
pip install opencv-python
+ 上記の画像を手元に保存しなさい.
+ 次のプログラムを実行しなさい.ファイル名は 05exS.py としよう.
+ 次のプログラムを実行しなさい.ファイル名は ex05S.py としよう.
#pre{{
import cv2 # OpenCV モジュール
# 画像の読み込み
img = cv2.imread('blackuni3.png')
if img is None:
print('File Not Found')
print(img.shape) # 正しく読み込めたら, img は NumPy の3次元配列になる(カラーの場合)
# 画像を表示
cv2.imshow("hoge", img)
cv2.waitKey(0) # 画像を表示したウィンドウ内で何かキーが押されるまで待つ
# 画像を書き込み
cv2.imwrite("hoge.png", img)
}}
+ 上記の画像とは別の画像を使って実行してみよう.
+ 上記を書き換えて遊ぼう.ただし,次の処理を必ず行うこと.情報収集は「opencv python ほげ」でウェブ検索したりがよいだろう.
-- 左右and/or上下反転
-- 色反転(画素値を反転させる)
-- ググると bitwise_notを使う方法が出てくるでしょう.それを使う場合,それでなぜ画素値の反転ができるのかを考えて,コメントとして書いてください
-- bitwise_not を使わない場合,「255から元の画素値を引く」で実現できます.こちらのやり方する場合も,それでなぜできるのかをコメントに書きましょう
-- 画像の大きさを変える
-- 適当に上記のもの以外の何か面白い処理を追加
(おまけのおまけ)カメラ付きのPCまたはウェブカメラを持ってるひとは,以下のプログラムを実行してみるとよいでしょう.
#pre{{
import cv2
cap = cv2.VideoCapture(0)
while(True):
rv, frame = cap.read()
cv2.imshow('hoge', frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
}}