第1回 拡大・縮小

ガイダンス

動画の解説を参照

この授業では Google Colab で開発を行います。
開発言語としては画像処理に関わるライブラリが豊富な Python を使用します。

1. 画像ファイルのアップロードと保存

概要

動画の解説を参照

まず最初にライブラリを読み込む必要があります。
import cv2
from google.colab import files
1行目は OpenCV というライブラリで、画像処理に関わる様々な処理を含みます。
2行目はGoogle Colabにファイルを読み込むためのものです。

このあとで以下の命令を実行すれば、画像をアップロードできます。
file = files.upload()

画像のデータを読み込むにはファイル名が必要なので、以下のようにしてファイル名を取得して「filename」に入れます。
filename = next(iter(file))

さらに、以下の命令を実行すれば「img」に画像の情報が保存されます。
img = cv2.imread(filename)

最後に以下の命令で画像を「ex1.jpg」として保存します。
cv2.imwrite("ex1.jpg", img)

まとめるとこのようになります。
import cv2
from google.colab import files

file = files.upload()
filename = next(iter(file))
img = cv2.imread(filename)
cv2.imwrite("ex1.jpg", img)

課題1

適当な画像をもとにして、概要のコードで画像 ex1.jpg を出力してください。

2. 横・縦の幅を指定して画像をリサイズ

動画の解説を参照

「cv2.resize」は画像をリサイズする関数です。引数の入れ方には2通りありますが、まずは横・縦のサイズを直接指定して保存する方法を見てみましょう。
以下のコードではこの関数の第1引数が画像情報の変数、第2引数はカッコで囲まれた2つの数値で、これが出力画像の横・縦の幅になります。
この場合は出力画像は横400ピクセル、縦300ピクセルになります。
実際にそうなったかどうかを調べるため、「shape」で画像の大きさを取得してみます。「h, w = img.shape[:2]」を実行すると、h には元画像の縦の幅、w には横の幅が入ります。
縮小した「img2」からも同様にして h2, w2 に縦と横の幅を入れます。
あとは print文で表示させれば、確かに大きさが変わっていることが確認できます。
(このコードではこれまでに読み込んだ「img」を使いまわしています。課題1のセルの下に新しいコードセルを入れて実行してください)
img2 = cv2.resize(img, (400, 300))
cv2.imwrite("ex2.jpg", img2)

h, w = img.shape[:2]
print(f"元画像の幅: {w}, 元画像の高さ: {h}")
h2, w2 = img2.shape[:2]
print(f"画像2の幅: {w2}, 画像2の高さ: {h2}")

課題2

※ 準備 : 学籍番号を入れて「入力」をクリック (タップ) してください。


課題1と同じ元画像を使い、概要のコードに変更を加えたものを使って に変更した画像 ex2.jpg を出力してください。

3. もとの大きさに倍率をかけた値を計算して画像をリサイズ

動画の解説を参照

課題2で取得した h, w の値を使い、「cv2.resize」の第2引数でこれらに定数をかけてやれば、「もとの何倍のサイズにする」という指定ができます。
「int(値)」は実数型の変数を整数に変換する関数です。このような変換をするのは、画像の横・縦のサイズが整数でなければならないからです。
この場合は出力画像は横幅がもとの2.1倍、縦の幅がもとの0.8倍になります。
(このコードでは「img」「h」「w」を使いまわしています。これまでのセルの下に新しいコードセルを入れて実行してください)
img3 = cv2.resize(img, (int(w * 2.1), int(h * 0.8)))
cv2.imwrite("ex3.jpg", img3)

h3, w3 = img3.shape[:2]
print(f"画像3の幅: {w3}, 画像3の高さ: {h3}")

課題3

これまでと同じ元画像を使い、概要のコードに変更を加えたものを使って 横を倍、縦を倍に変更した画像 ex3.jpg を出力してください。

4. 倍率を指定して画像をリサイズ

動画の解説を参照

もとの画像のサイズを調べずに横・縦にそれぞれ倍率をかけることもできます。
以下のコードの「cv2.resize」関数では、第2引数 (横と縦のサイズを指定するところ) を「None」(つまり「なし」) にしています。
第3, 第4引数で横と縦の倍率を指定しています。
この場合は出力画像は横幅がもとの1.2倍、縦の幅がもとの2.1倍になります。
(このコードでも「img」を使いまわしています。これまでのセルの下に新しいコードセルを入れて実行してください)
img4 = cv2.resize(img, None, fx=1.2, fy=2.1)
cv2.imwrite("ex4.jpg", img4)

h4, w4 = img4.shape[:2]
print(f"画像4の幅: {w4}, 画像4の高さ: {h4}")

課題4

これまでと同じ元画像を使い、概要のコードに変更を加えたものを使って 横を倍、縦を倍に変更した画像 ex4.jpg を出力してください。

提出

動画の解説を参照

今回作成したノートブックを「imgprc2024@gmail.com」と共有してください。
※ 課題の再提出の際は、ノートブックの再度の共有はせずにチャットで連絡してください。