問題タブ [straight-line-detection]

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 投票する
1 に答える
698 参照

python - 線を見つけてマウスクリックで色付け

@ALL これは、元の質問を編集して、主題をもう少し明らかにしたものです。

問題文

  • 産業用 P&ID プロットがあるとします。
  • 工程に重要な一部の線のみを着色することを目指しています。
  • ユーザーは線分をクリック (マウスの左クリック) するだけで、線分に色を付けることができます。

問題アプローチ

私はプログラミングが初めてです-> Python(3.5)を使用してこれを試してください。私の見方では、アルゴリズムは次のようになります。

  • プロットは .pdf 形式になります。したがって、この例で示されているように、PIL ImageGrab を使用するか、.pdf を .png に変換できます。
  • アルゴリズムは、マウス クリックの周囲のピクセルを検索し、それを同じサイズの別の部分 (たとえば 6x3 ピクセルのストリップ) と比較しますが、左/右に 1 ステップ (1 ~ 5 ピクセル)
  • それらの差の平均を確認すると、2 つのストリップが同一であるかどうかがわかります。
  • このようにして、アルゴリズムは行末、矢印、角、またはその他の要素の両方を見つける必要があります
  • これが検出され、位置が記録され、マークアップ線が描画されると、ユーザーは別の線を選択することが期待されます

要約する

  • 必要な行をクリックします
  • マウス クリックの周囲の画像の小さな部分をつかみます
  • 線が水平か垂直かを確認する
  • 指定されたサイズの水平/垂直スライスをトリミングします
  • 改行を見つけて、改行の位置を記録する
  • 見つかった 2 つの位置の間に、特定の色 (緑としましょう) の線を引きます。
  • 次の行が選択されるのを待ってから繰り返します

他の考え

  • 添付のサンプル画像の 2 つの写真と、私が達成しようとしていることを見つけることができます。
  • ここにあるアプローチを使用して、スライスの「穴」を見つけようとしました: OpenCV to find line Ends
  • ImageGrab ルーチンなどに固執する厳密なルールはありません。
  • 私が使用できる他の戦術を知っている場合は、お気軽にコメントしてください
  • どんなアドバイスでも大歓迎です。

サンプル画像:

サンプル画像

望ましい結果 (ペイントで変更):

望ましい結果 (ペイントで変更)

これまでに試した作業で投稿に更新を追加する

元のコードにいくつかの変更を加えたので、以下に投稿します。コメント内のすべては、デバッグまたは説明用です。あなたの助けは大歓迎です! 介入することを恐れないでください。

以下は私が得た結果です。それは私が望んでいたものではありませんが、正しい軌道に乗っているように感じます. ストリップ内のピクセル位置を見つけて、それを全体像のピクセル位置に相対的にするために、実際にいくつかの助けを借りることができました。

この種の別の画像は、より良い品質ですが、より多くの問題を争いにもたらします。

0 投票する
2 に答える
1948 参照

python - OpenCV の HoughLines は、検出された行を [rho,theta] マトリックスにどのような順序でリストしますか?

線を含む特定の画像が OpenCV の HoughLine 変換に渡されると、rho と theta のペアのリストが返されます。各ペアは個々の線を定義します。この rho,theta ペアのリストにリストされている行の順序は何ですか?

たとえば、この8行の 画像をpythonで使用した場合、8行の画像

次のように、8 行分の rho,theta 行列が返されました。

このマトリックスにリストされている行の順序は、openCV によってどのように決定されますか?

0 投票する
2 に答える
3213 参照

python - Python で OpenCv を使用してほぼ直線を検出する

OpenCv を使用して画像内の直線を検出しています。以下はコードです:

画像(PDFのスクリーンショットImage.jpg下)の場合、結果としてresult.png)を取得していますが、これはまさに私が望む出力です。

画像.jpg ここに画像の説明を入力

結果.png ここに画像の説明を入力

しかし、以下の Image Test.jpgを入力として与えると、アルゴリズムが正しく機能しません。次のエラーが発生しています。

Test.jpgでは水平線がまっすぐではないため (電話のカメラでこれをクリックしたため)、またminLineLength値を100に変更すると、上記のエラーは表示されず、それぞれに不完全な色あせた線が表示されるためだと思います行。アルゴリズムを正しく機能させるには、アルゴリズムでどのパラメーターを変更する必要があるか教えてください。

テスト.jpgここに画像の説明を入力