Python演習問題:画像処理 †
インポート・エイリアス設定 †
この演習ではOpenCVに頼る.
import cv2
import numpy as np
import matplotlib.pyplot as plt
問題 †
- 下の画像ファイル"hydrangea.jpg"を読み込み,表示しなさい.
imgorg = cv2.imread(filename)
cv2.imshow # or
plt.imshow
- 元画像をHSV変換し,アジサイの花の色に近い部分だけを抜き取りなさい.カットする色の部分は白で埋めること.
cv2.GaussianBlur(imgorg, (X, X), X)
imghsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.inRange
cv2.bitwise_and
cv2.bitwise_not
cv2.add
- 上記の閾値処理をした画像をもとに,アジサイの花の輪郭をグレースケールで表示しなさい.
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.threshold(img_grayed, XX, XX, cv2.THRESH_BINARY)
cv2.threshold(img_grayed, XX, XX, cv2.THRESH_BINARY_INV)
- アジサイの輪郭を検出し,元画像の上に線を引いて示しなさい.
閾値にもよるが,findContoursは下記のどれかを試して良いのを選ぶ.
cv2.findContours(..., cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.findContours(..., cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.findContours(..., cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cv2.findContours(..., cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContoors(img, contour_line, XX, (B, G, R), XX)
- コンターのほか,アジサイを検出し円形や矩形で囲みなさい.
cv2.boundingrect(XX)
cv2.rectangle(img, XX, XX, ...)
cv2.minEnclosingCircle(c)
cv2.circle(img, XX, XX, ...)
データ †
演習用のアジサイの画像.撮影者には許可をいただいた.
三室戸寺(宇治市) 2017年7月
解答例(参考) †
閾値のキャリブレーションに時間を要した.
手前の大きい2つを検出できた時点で満足.

参考資料 †