#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/]]