質問: お世話になっております。 今回は、python3 + opencvにて以下のようなことをやりたいと考えているのですが、どのようにすれば実現できるのか分からない為、ご質問させて下さい。 (やりたいこと) 画像ファイル(png)を読み込み、画像ファイルの中のピンク色の箇所を 白い線で囲みたい。 ※画像ファイルはたくさんあり、それぞれにピンク色の箇所は異なる箇所にあります。 OpenCVを使えば出来そうかなとは思っているのですが、 ほとんどOpenCVを使ったことがない為、どういった具合で処理をかけばいいのかさっぱり分かりません。こんな関数あるよとか、こんな参考HPあるよといったことでも何かありましたら、ご教授頂ければと思います。 どうぞよろしくお願い致します。 (イメージ 処理前) ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/f0a7af86ec267336f04fdd6d67ae8512.png) (イメージ 処理後) ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/3003dc54b4c78a9f2ad3679568d97f91.png)
回答: 範囲指定についてはMasahikoHirataさんの書かれている方法が良いと思います。以下にも別の方法(グレースケールにして閾値を設定して二値化する)を載せておきます。 輪郭取得に関しては以下のページが参考になると思います。サンプルコードにコメントを付けておきます。 輪郭: 初めの一歩 — OpenCV\-Python Tutorials 1 documentation !イメージ説明 > > 二値画像から輪郭を検出 > > > ``` import numpy as np import cv2 im = cv2.imread('test.jpg') # 画像を読み込む imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) # グレースケール画像に変換 ret,thresh = cv2.threshold(imgray,127,255,0) # 127/255で二値化 image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) # 輪郭を検出 ``` > > 検出した輪郭を描画するには cv2.drawContours 関数を使います > > > ``` img = cv2.drawContours(img, contours, -1, (0,255,0), 3) ``` OpenCVは、正直なところ取っつき悪いです。私も最初は???でした。しばらく触っていると慣れてきます。あせらず頑張って下さい。