問題タブ [opencv-contour]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
579 参照

c++ - 特定のプロジェクトでOpencv findContoursが間違った結果を得る

opencv findContoursのサンプル コードを使用して輪郭を取得しました。

この画像の輪郭を正しく取得することに成功しました。

しかし、私のプロジェクトでfindContoursを使用すると、輪郭が0ポイント、輪郭ベクトルに数百万のポイント、いくつかのポイントが巨大な数など、間違った輪郭データが取得されます。

以下の私のプロジェクトリストでテストされたコード:

誤差等高線データの画像です

これが正しい等高線データです。

プロジェクトを再作成しましたが、問題はまだ発生しています。

どうすればこの問題を解決できますか?

アップデート:

パス "/" を "\" に変更し、CV_BGR2GRAY の代わりに CV_RGB2GRAY を作成すると、それも間違っています。

以下のグレーとキャニーの出力リストの画像。

オリジナル:i.imgur.com/KXB6OAS.png

灰色:i.imgur.com/y1prHnj.png

キャニー出力:i.imgur.com/UtUzRkh.png

比較:i.imgur.com/lLZ8OBj.jpg

私は自分のプロジェクトでライブラリを使用しています:FLTK、openGL(freeglut、glew)、LinearSystemLib 2005、opencv211 をコンパイルした gpu で使用します。findcontours サンプル コード opencv Web サイトは、私のプロジェクトと同じ opencv ライブラリで構築されています。

0 投票する
0 に答える
7018 参照

c++ - findContours opencv からの階層の理解

opencv c++ から Hierarchy と findContours を理解しようとしていますが、難しいと感じています。

ここでこの質問をしましたが、まだ明確に理解できません。以下のサンプル画像を使用して、さまざまな例で使用してみました

ここに画像の説明を入力

上の画像の場合、次のコードを実行します。

階層の上記の画像から得た出力は次のとおりです

hereの説明によると、7つの輪郭があります。画像に2つしか表示されていない場合、これがどのように可能かわかりません。外側の輪郭と内側の輪郭に囲まれた別の輪郭。

次に、6、5、3 という数字は何を表しているのでしょうか。説明を読んでも、根底にあるロジックを理解できません。誰かがこれを説明できれば本当に助かります。

疑問を解消するために、さまざまな画像タイプで試してみました。下はもう一つ

ここに画像の説明を入力

そしてこれに対する答えは

これで 3 つの等高線ができましたが、実際には肉眼では 1 つしかありません。

最後に、最悪のケースを試してみました。

ここに画像の説明を入力

そして出力は、

私は明らかにいくつかの論理が欠けていることを知っています。誰かが説明できれば、それは大きな助けになるでしょう。

いくつかのしきい値に基づいて、大、中、小の領域に基づいて輪郭を分割しようとしています。輪郭の面積を計算しようとしていますが、完全には理解できません。

私が推測できることは、可能な単一の輪郭ごとに2つの輪郭領域が描かれている可能性があるということです。1 つは境界で、もう 1 つは内側の穴またはスペースです。それはそのようなものですか?

それでも、階層の数はまだ私を混乱させます。

どんな助けでも本当に感謝しています。前もって感謝します :)。

0 投票する
1 に答える
1524 参照

opencv - OpenCV - 特定の点が輪郭内にあるかどうかを判断する方法は?

ランダムな輪郭が与えられた場合、与えられた入力点が輪郭内にあるかどうかをどのように判断できますか? 簡単な解決策があれば申し訳ありませんが、私はそれを理解することができません。

私が持っていたアイデアの1つは、直線の方程式を使用し、点を接続して、それが大きいか小さいかなどを確認することでした.しかし、それは線の位置に依存するため、どこにも行きません.

0 投票する
1 に答える
5050 参照

c++ - opencv: 矩形検出で輪郭とハフ変換を使用する

輪郭検出とハフ変換というさまざまなアプローチを使用して、グレースケール イメージ内の白い四角形を検出しようとしています。残念ながら、私が処理している画像にはいくつかの制限があります。

  1. 画像には多くの機能があり、長方形だけが機能ではありません
  2. 長方形は他のフィーチャにマージできます (たとえば、長方形のエッジの 1 つを長い直線と重ねることができます)。
  3. 四角形には、他の機能 (文字、数字、または四角形内のロゴなど) を含めることができます。
  4. 長方形のように見える機能がいくつかあります (たとえば、文字「D」は、右上と右下に小さな円弧がある長方形のように見えます。別の例は、平行四辺形ではなく台形です)。
  5. 長方形は、時計回りと反時計回りの両方で 0 から 15 度まで回転できます。
  6. 異なる照明条件 (例: 1 ピクセルのギャップ) で線が複数の線に分割される可能性があるため、線をフィルタリングするための最小線の長さは小さくする必要があります (例: ハフ変換)。
  7. 最小線の長さが小さい値に設定されている場合、同じ線の重複した線が異なる向きで表示されることがよくあります (つまり、複数の線を結合する必要があります)。

輪郭アプローチでは、一部の画像の輪郭が壊れています。さらに、画像には四角形などの機能 (文字「D」など) を含めることができます。これが良いアプローチかどうかはわかりません。

次の投稿のように、ハフ変換を使用して長方形を検出することを提案する多くの記事/フォーラムを見てきました。残念ながら、行の長さの最小値を小さく設定する必要があり、行が重複しています。上記のポイントを処理する方法がわかりません (たとえば、すべての重複する線を結合し、各エッジに対して 1 つの線のみを選択し、ほとんどの部分が線であるが「D」のような小さな円弧で特徴を区別する方法、およびどのように長い直線とマージされた 1 つのエッジを持つ正方形を分離するなど)。

透視投影による長方形認識のハフ変換と輪郭検出

どんな提案も大歓迎です!

編集:いくつかの写真を追加

キャラクター D

キャラクター D

長い直線とマージされた四角形のエッジ

ロゴ付きの長方形とエッジが長い直線で結合されている

ここに画像の説明を入力

台形 (上に影があり、下に台形を形成)

0 投票する
1 に答える
928 参照

opencv - ホモグラフィと輪郭検出の検索

問題は、画像内の既知の長方形のオブジェクトを検出することです。次のうち、計算コストが低いものはどれですか。

  1. ホモグラフィーの検索 - ホモグラフィーを検索するために、既知のオブジェクトのテンプレートを使用して特徴マッチングを行います。
  2. 輪郭検出 - 画像内の最大の輪郭を検出しようとします。この特定のケースでは、最大の輪郭が、見つけようとしている既知の長方形のオブジェクトに対応すると仮定します。

どちらの場合も、オブジェクトを検出して遠近法を設定した後、遠近法変換を行います。

注: Open-CV 関数を使用してホモグラフィを見つけ、輪郭を検出しています。

0 投票する
0 に答える
97 参照

opencv - 楕円の形状の認識 OpenCV

私は楕円形で Opencv を使用しています。垂直楕円と水平楕円を分離したいと考えています。

どうすればそれを行うことができますか?

0 投票する
1 に答える
3363 参照

python - OpenCV findContours は画像の境界線のみを検索します

ラズベリーパイに取り付けられたカメラでレーザーとフォトダイオードを追跡するプロジェクトに取り組んでいます。pi は arduino に指示を送信し、フォトダイオードから応答が得られるまでレーザーの向きを変更します。現在、私はプロセスのカメラの側面に取り組んでいます。

使用するオブジェクトの一般的な輪郭と一致させるために、画像の輪郭を見つけようとしていますが、 findContours() は画像の境界線しか提供しません。

画像を投稿できればいいのですが、担当者が足りません。キャニー エッジは、黒地に白と黒のラインです。輪郭のある画像はキャプチャされた画像ですが、境界線が描かれており、他の輪郭はありません。

これが私のコードです:

編集: ここに 2 つの写真があります http://imgur.com/EVeMVdm,QLoYa2o#0 http://imgur.com/EVeMVdm,QLoYa2o#1

0 投票する
1 に答える
3822 参照

c++ - FindContour: 輪郭間の距離を測定

投稿でさらに詳しく知ることができて非常に感謝しています:輪郭間の最小距離を見つける

私は FindContours を使用しており、必要に応じて複数の輪郭を取得しています。問題は、隣接する各ペア間の最小距離を見つけたいことです。たとえば、黄色の輪郭と濃い緑の間、濃い緑とシアンの間、シアンと紫の間です。

上記の投稿から一般的な方法を理解しました。しかし、誰でも(自動的に)それらを次々に選択する方法を教えてもらえますか?

ここに画像の説明を入力