
やりたいこと
この画像から、一番大きい枠線を認識させたい。小さい枠線は認識させない。
認識のイメージ
※2値化しています。白色の部分が認識対象です。
困っていること
一番大きい枠線には小さい四角があり、どのように処理を行ったら良いか分からないこと。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
# coding:utf-8 import numpy as np import cv2 # ソース画像の読み込み(グレースケールで取得) src_img = cv2.imread("./src.jpg",0) # ソース画像を2値化(閾値を150に設定) _,bin_img = cv2.threshold(src_img,150,255,cv2.THRESH_BINARY) # 結果を表示する画像を生成(2値画像、0で初期化) res_img = np.zeros(bin_img.shape,np.uint8) # 輪郭抽出を実行 image, contours,hierarchy = cv2.findContours(bin_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) # 結果表示用画像に抽出した輪郭を書き込み、その中を白で埋める cv2.fillPoly(res_img,pts=[contour[-1]],color=(255,255,255)) # 結果画像の表示 cv2.imshow("Result",res_img) cv2.waitKey(0) cv2.destroyAllWindows() # 結果画像の保存 cv2.imwrite("./res.jpg",res_img)
以上の通りやれば、できるはずです。
外側の輪郭線(すなわち輪郭線を構成する点の集合)の抽出のみを目指しているのであれば、contours
が取得できた時点で終了してよいですが。
ポイントとしては、
cv2.findContours
が出力する結果の第一要素(上のソースのimage
に対応)は使わないcv2.findContours
の抽出モードをcv2.RETR_EXTERNALに、抽出メソッドにcv2.CHAIN_APPROX_NONEを使用すること
になる思います。
1に関しては、OpenCVのドキュメントにはimage
に何が入っているのかはっきりと書かれていなかったので明言はできませんが、
中身をみるかぎり今回の目的上関係のないもの(私の環境では、bin_img
と中身が一致した)だと考えられるため、使用しませんでした。
2に関して、抽出モードをcv2.RETR_EXTERNALとするのはもっとも外側の輪郭線のみ抽出するためです。
また抽出メソッドをcv2.CHAIN_APPROX_NONEとするのは、抽出した輪郭線をすべて取得するためです。
cv2.CHAIN_APPROX_NONEとしてしまうと、間引かれた輪郭点の集合しか得られなくなってしまいます。
追記
すでに解決していたようですね。
返信欄を見逃していました。
投稿2017/09/04 12:32
編集2017/09/04 12:35
退会済みユーザー
総合スコア0
0
ベストアンサー
findContours()
を使えば、解決できると思います。
http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours#findcontours
この場合、第2引数(mode)には、CV_RETR_EXTERNALを使うことになると思います。
輪郭の取得後、その範囲の塗りつぶしを行うには、drawContours()
を使うとよいと思います。
http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours#drawcontours
Pythonではない上に、OpenCVのバージョンも古いですが、以下のサイトが参考になると思います。
http://imagingsolution.blog107.fc2.com/blog-entry-202.html
Pythonは詳しくないので、見当違いだったらすいません。
投稿2017/09/04 02:22
総合スコア10262
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。


退会済みユーザー
2017/09/04 10:09

退会済みユーザー
2017/09/04 12:14

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/09/04 12:47