第7回 課題解答

元画像の例

課題1 : リサイズとグレースケール化

import cv2
 
# 画像を読み込む
image = cv2.imread('source.jpg')
 
# 画像のサイズを取得する
height, width = image.shape[:2]
 
# 横幅が800ピクセルになるようにアスペクト比を保ったままリサイズする
new_height = int(height * (800 / width))
resized_image = cv2.resize(image, (800, new_height))
 
# 画像をグレースケール化する
gray_image = cv2.cvtColor(resized_image, cv2.COLOR_BGR2GRAY)
 
# 画像を保存する
cv2.imwrite('1.png', gray_image)
1

課題2 : X方向のソーベルフィルタ

import cv2
 
# 画像を読み込む
image = cv2.imread('1.png')
 
# X方向のソーベルフィルタをかける
image = cv2.Sobel(image, cv2.CV_32F, 1, 0, ksize=3)
 
# 画像を保存する
cv2.imwrite('2.png', image)
2

課題3 : Y方向のソーベルフィルタ

import cv2
 
# 画像を読み込む
image = cv2.imread('1.png')
 
# Y方向のソーベルフィルタをかける
image = cv2.Sobel(image, cv2.CV_32F, 0, 1, ksize=3)
 
# 画像を保存する
cv2.imwrite('3.png', image)
3

課題4 : 検出結果の合成

import cv2
 
# 画像を読み込む
image = cv2.imread('1.png')
 
# X方向のソーベルフィルタをかける
imageX = cv2.Sobel(image, cv2.CV_32F, 1, 0, ksize=3)
# Y方向のソーベルフィルタをかける
imageY = cv2.Sobel(image, cv2.CV_32F, 0, 1, ksize=3)
 
# 2つのフィルタの結果を合成する
for i in range(image.shape[0]):
  for j in range(image.shape[1]):
    image[i][j] = (imageX[i][j]**2 + imageY[i][j]**2)**0.5
 
# 画像を保存する
cv2.imwrite('4.png', image)
4

課題5 : Canny法によるエッジ検出

import cv2
 
# 画像を読み込む
image = cv2.imread('1.png')
 
# Cannyアルゴリズムを適用してエッジ検出を行う
edges = cv2.Canny(image, 60, 100)
 
# 画像を保存する
cv2.imwrite('5.png', edges)
5