#author("2018-01-15T14:45:32+09:00","default:Miyashita","Miyashita")
#author("2018-07-25T23:25:01+09:00","default:Miyashita","Miyashita")
*Python演習問題:画像処理 [#o7336314]
***インポート・エイリアス設定 [#eddf0ea4]
この演習ではOpenCVに頼る.
 import cv2
 import numpy as np
 import matplotlib.pyplot as plt
#codeprettify(lang-python){{
import cv2
import numpy as np
import matplotlib.pyplot as plt
}}
***問題 [#ec11980f]
+下の画像ファイル"hydrangea.jpg"を読み込み,表示しなさい.
 imgorg = cv2.imread(filename)
 cv2.imshow # or
 plt.imshow
#codeprettify(lang-python){{
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
#codeprettify(lang-python){{
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)
#codeprettify(lang-python){{
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)
#codeprettify(lang-python){{
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, ...)
#codeprettify(lang-python){{
cv2.boundingrect(XX)
cv2.rectangle(img, XX, XX, ...)
cv2.minEnclosingCircle(c)
cv2.circle(img, XX, XX, ...)
}}
***データ [#u8b1bd9d]
演習用のアジサイの画像.撮影者には許可をいただいた.
#ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/hydrangea.jpg,320x320)
 三室戸寺(宇治市) 2017年7月
***解答例(参考) [#h3ae7966]
閾値のキャリブレーションに時間を要した.~
手前の大きい2つを検出できた時点で満足.~
&ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/hydrangea_mask.jpg,320x320);
&ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/hydrangea_extracted_gray.jpg,320x320);
&ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/hydrangea_contour.jpg,320x320);

***参考資料 [#e10975dc]
-[[OpenCV Python Tutorials>http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_contours/py_contour_features/py_contour_features.html]]
-[[Qiita 機械学習のためのOpenCV入門>https://qiita.com/icoxfog417/items/53e61496ad980c41a08e]]
-[[画像処理入門講座 : OpenCVとPythonで始める画像処理>http://postd.cc/image-processing-101/]]

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes