






cv2.findContoursで得られた輪郭リストの中にいつも画像の一番外側の四角い枠の輪郭線が含まれて、
意味がないので、このような輪郭を検出しないように設定する方法があるのでしょうか。
アップした画像は
python
1contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE) 2dst = cv2.drawContours(image.copy(), contours, -1, color=(0, 0, 255), thickness=1) 3cv2_imshow(dst)
で得たもので、赤の線は検出した輪郭線です。
画像外輪の全部か一部が検出されました(これを避けたいのです)
サンプル画像とコードを載せてもらえませんか?
ありがとうございます。
一般的な問題で、特定の画像と関係ありません。
> 画像の一番外側の四角い枠
フレームの様なものでしょうか? そうでしたら、事前に画像を切り抜いておくのはどうでしょう。
img = cv2.imread('sample.png')
cropped = img[s:h-s, s:w-s, :] # s は枠の幅(縦横同一サイズと仮定)
> 画像の一番外側の四角い枠の輪郭線が含まれて
「四角い枠」とかいう何が描かれている画像を用いているのだとしたら,それを「一般的」と言うのは乱暴と思える.
対処方法はその「枠」の具合次第となり得るわけだし.
そういう話ではなくて,「画像の外周が得られてしまう」という類の話であれば,その理由とは「あなたが findContours に食わせている画像がいつもそうなるような内容になっているから」なのだと推測される.
いずれにせよ,問題が再現するだけのさしさわりのない画像サンプルとそれに対する処理コードを示すことは簡単なことなハズなので,提示した方が話がスムーズに進むと思う.
fana さま
ご指摘ありがとうございます。
> 「一般的」と言うのは乱暴と思える.
確かに、画像内容によります。
ただ、自分がこれまでの実験では、画像の外輪(image frame border, the outside boundary of an image )の全部またはその一部が輪郭線としてcv2.findContours(...)に検出されます。
結果画像(複数)を最初の質問の処にアップしました。
melian さま
アイディアありがとうございます❣
実際の結果画像(複数)を最初の質問の処にアップしました。
1.画像を読み込ませたところから"binary"までの変換内容も質問内容に追加お願いします。
2.findContoursの直前のbinaryをimwriteで書き出して確認してみてください。
yominet さま
ありがとうございます。
"binary画像"と検出される輪郭との関係について、別の掲題にて議論(質問)させていただきたいと思います。
そちらにお願いします。
回答2件
あなたの回答
tips
プレビュー
