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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

2890閲覧

OpenCVで物体の輪郭を検出したいが、途切れてしまう

CAIOS

総合スコア24

OpenCV

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/10/07 09:47

###実現したいこと
OpenCV for Androidを用いて、物体認識を行いたい。
具体的にはfindContoursで輪郭を検出し、完全に囲われている部分を切り取って物体と認識する。

###問題点
findContoursで輪郭を検出したいのですが、肝心の輪郭が途切れてしまっています。(画像参照)
特にコップのような物体だと検出が難しく、画像の左の辺などはほぼ検出されていません。

![イメージ説明

###試したこと
以下ににコードを掲載しますが、

  1. medianBlurで画像をぼかし、ノイズを消す
  2. morphologyExでノイズを消す
  3. dilateで輪郭を強調
  4. adaptiveThresholdで二値化
  5. thresholdで二値化
  6. Cannyでで二値化
  7. findContoursで輪郭を検出

と、前処理はしっかりと行っているはずなのにうまくいきません。

Kotlin

1fun Image_Conversion() { 2val bitmap = imageView.drawable.toBitmap() 3 val mat = Mat() 4 var mat_bin = Mat() 5 var counter = arrayListOf<MatOfPoint>() 6 var hiert = Mat() 7 var output = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888) 8 9Imgproc.cvtColor(mat, mat_bin, Imgproc.COLOR_RGB2GRAY) 10Imgproc.medianBlur(mat_bin, mat_bin, 7) 11 12 Imgproc.morphologyEx(mat_bin, mat_bin, Imgproc.MORPH_OPEN, Mat()) 13 Imgproc.dilate(mat_bin, mat_bin, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, Size(5.0, 5.0))) 14 15 Imgproc.adaptiveThreshold(mat_bin, mat_bin, 255.0, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY_INV, 13, 19.0) 16 17 Imgproc.threshold(mat_bin, mat_bin, 0.0, 255.0, Imgproc.THRESH_BINARY_INV or Imgproc.THRESH_OTSU) 18 19 Imgproc.Canny(mat_bin, mat_bin, 20 Imgproc.threshold(mat_bin, mat_bin, 0.0, 255.0, Imgproc.THRESH_BINARY_INV or Imgproc.THRESH_OTSU) * 0.5, 21 Imgproc.threshold(mat_bin, mat_bin, 0.0, 255.0, Imgproc.THRESH_BINARY_INV or Imgproc.THRESH_OTSU), 22 3, true) 23 24 Imgproc.findContours(mat_bin, counter, hiert, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_NONE) 25}

これを解決するにはどうすればいいでしょうか?
点群は一応コップの輪郭を表せているので点群をいい感じに曲線で結ぶような方法でもあれば簡単なのですけどね。

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

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

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

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

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

guest

回答3

0

前処理はしっかりと行っている

とのことですが,
findContours()で輪郭を得るためには,入力画像の画素値が背景部と前景部で 0かそれ以外 で分かれている必要があります.
今行われている前処理の内容で任意の画像に対して 見つけたい物(この例ではコップ)とそれ以外全て を完全に分離するのは極めて困難(無理に近い)と思います.

投稿2019/10/08 05:45

fana

総合スコア11634

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

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

0

最近OpenCVを勉強し始めたばかりですので、間違えていたらすみません。
キャニー法でエッジ検出した結果に、モルフォロジー処理のクロージングをする事で点線が繋がるはずです。

stackoverflow - How to fit curve through cloud of points? OpenCV/C++

投稿2019/11/10 07:33

AndoJun

総合スコア41

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

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

0

ベストアンサー

かなり処理としては難しいものであると思いますが、今までの処理に、
輪郭のピクセル同士を直線でつなぎ、その交点から交点までを輪郭(の一部)とする
ことを付け加えたりすると、もしかしたらうまくいく(目的の動作に近い動きをする)のかもしれないと思いました。

投稿2019/10/08 10:23

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問