質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Q&A

1回答

3416閲覧

opencvにおける、画像の切り出しについて

Bell2380

総合スコア12

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

0クリップ

投稿2019/05/16 10:48

前提・実現したいこと

opencvにおける、画像の切り出しについて
今画像から一部の個所を切り出しするプログラムを作成しています。
以下の画像の大きい四角の中に4つずつある小さい四角を別のフォルダにjpg形式で保存したいと考えています。
フォルダから画像を呼び出し、グレースケール化、二値化、輪郭検出までたどりついています。
イメージ説明

発生している問題

複数ある場合にどういった風に画像を切り出して別フォルダに保存するのか理解できていません。
四つの小さい四角のみ切り出し、別のフォルダに保存する方法をご教授ください。

該当のソースコード

import cv2 as cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('img/001.jpg', cv2.IMREAD_COLOR) img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) cv2.imwrite('img/gray/001_gray.jpg', img_gray) img_binarization = cv2.adaptiveThreshold(img_gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,9) cv2.imwrite('img/binarization/001_binarization.jpg', img_binarization) img_1, contours, hierarchy = cv2.findContours(img_binarization, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) img = cv2.drawContours(img, contours, -1, (0,0,255), 3) cv2.imwrite(\"img/result/001_result.jpg\", img)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「小さい四角形」を判定する方法が必要,ということでしょうか?

例えば,Contour群に対して,

  • 面積が小さすぎる/大きすぎる やつはざっくりと除外
  • 狙いの小さい四角形は大きな四角形に含まれているので,hierarchyの情報を見て親がいないやつは除外
  • AABB(Axis Aligned Bounding Box)の面積と自分の面積が違いすぎるやつは除外(≒四角形と言えないものを捨てる)
  • 親と自分の面積が近すぎるやつは除外(1つの黒枠の内外に2つのContourが出てくるだろうから,内側のやつを捨てる)

等々の判定を行い,残ったものを「小さい四角形」とすることはできませんか?
(保存の際はAABBの範囲を切り出せば良いかと)

投稿2019/05/17 05:32

fana

総合スコア11654

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bell2380

2019/05/17 09:06

面積の大きいものを除外するようなものを考えてはいたのですが、実装しようとするとどんなプログラムを書けばいいか悩んだ結果質問させて頂きました。 さらにその部分を別画像ファイルにして保存するプログラムも調べても分からずです…。 できれば知恵を貸してください。
fana

2019/05/17 10:12

当方,pythonを知らない人なので,具体コードを示すことができないのですが, * Contourの面積は contourArea を使って求められます.flagを指定すれば「向き」もわかるので, 1つの黒枠の内外に2つのContourが出てくる状態でどっちを残すか?の判定に使えそうです. * AABBは boundingRect で得られます * 画像の一部を切り出して保存する処理については https://teratail.com/questions/177278 の回答のコード等が参考になるのではないでしょうか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問