Python演習問題:画像処理

インポート・エイリアス設定

この演習ではOpenCVに頼る.

import cv2
import numpy as np
import matplotlib.pyplot as plt

問題

  1. 下の画像ファイル"hydrangea.jpg"を読み込み,表示しなさい.
    imgorg = cv2.imread(filename)
    cv2.imshow # or
    plt.imshow
  2. 元画像をHSV変換し,アジサイの花の色に近い部分だけを抜き取りなさい.カットする色の部分は白で埋めること.
    cv2.GaussianBlur(imgorg, (X, X), X)
    imghsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    cv2.inRange
    cv2.bitwise_and
    cv2.bitwise_not
    cv2.add
  3. 上記の閾値処理をした画像をもとに,アジサイの花の輪郭をグレースケールで表示しなさい.
    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)
  4. アジサイの輪郭を検出し,元画像の上に線を引いて示しなさい.
    閾値にもよるが,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)
  5. コンターのほか,アジサイを検出し円形や矩形で囲みなさい.
    cv2.boundingrect(XX)
    cv2.rectangle(img, XX, XX, ...)
    cv2.minEnclosingCircle(c)
    cv2.circle(img, XX, XX, ...)

データ

演習用のアジサイの画像.撮影者には許可をいただいた.

hydrangea.jpg
三室戸寺(宇治市) 2017年7月

解答例(参考)

閾値のキャリブレーションに時間を要した.
手前の大きい2つを検出できた時点で満足.
hydrangea_mask.jpg hydrangea_extracted_gray.jpg hydrangea_contour.jpg

参考資料


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-01-15 (Mon) 05:45:32 (155d)