第5回 課題解答

元画像の例

課題1 : リサイズとノイズ追加

import cv2
import random
 
# 画像を読み込む
img = cv2.imread('source.jpg')
 
# 横幅が800ピクセルになるようにアスペクト比を固定してリサイズ
height = round(img.shape[0] * (800 / img.shape[1]))
img = cv2.resize(img, (800, height))
 
# 画像を保存する
cv2.imwrite('1_リサイズ.jpg', img)
 
# 画素数の1%のランダム内色のノイズをランダムに位置に配置する
for i in range(round(img.shape[0] * img.shape[1] * 0.01)):
  x = random.randint(0, img.shape[1] - 1)
  y = random.randint(0, img.shape[0] - 1)
  img[y, x] = [random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)]
 
# 画像を保存する
cv2.imwrite('1_ノイズ.jpg', img)
1_リサイズ


1_ノイズ

課題2 : 移動平均フィルタ

import cv2
 
# 画像を読み込む
img = cv2.imread('1_ノイズ.jpg')
 
# 移動平均フィルタ
img3 = cv2.blur(img, (3, 3))
img5 = cv2.blur(img, (5, 5))
img7 = cv2.blur(img, (7, 7))
img9 = cv2.blur(img, (9, 9))
 
# 画像を保存する
cv2.imwrite('2_3.jpg', img3)
cv2.imwrite('2_5.jpg', img5)
cv2.imwrite('2_7.jpg', img7)
cv2.imwrite('2_9.jpg', img9)
2_3


2_5


2_7


2_9

課題3 : ガウシアンフィルタ

import cv2
 
# 画像を読み込む
img = cv2.imread('1_ノイズ.jpg')
 
# ガウシアンフィルタ
img1 = cv2.GaussianBlur(img, (9, 9), 1)
img5 = cv2.GaussianBlur(img, (9, 9), 5)
img9 = cv2.GaussianBlur(img, (9, 9), 9)
 
# 画像を保存する
cv2.imwrite('3_1.jpg', img1)
cv2.imwrite('3_5.jpg', img5)
cv2.imwrite('3_9.jpg', img9)
3_1


3_5


3_9

課題4 : メディアンフィルタ

import cv2
 
# 画像を読み込む
img = cv2.imread('1_ノイズ.jpg')
 
# メディアンフィルタ
img3 = cv2.medianBlur(img, 3)
img5 = cv2.medianBlur(img, 5)
img9 = cv2.medianBlur(img, 9)
 
# 画像を保存する
cv2.imwrite('4_3.jpg', img3)
cv2.imwrite('4_5.jpg', img5)
cv2.imwrite('4_9.jpg', img9)
4_3


4_5


4_9

課題5 : 双方向フィルタ

import cv2
 
# 画像を読み込む
img = cv2.imread('1_リサイズ.jpg')
 
# 双方向フィルタ
img75 = cv2.bilateralFilter(img, 9, 75, 75)
img255 = cv2.bilateralFilter(img, 9, 255, 75)
 
# 画像を保存する
cv2.imwrite('5_75.jpg', img75)
cv2.imwrite('5_255.jpg', img255)
5_75


5_255