問題タブ [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.
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 ルーチンなどに固執する厳密なルールはありません。
- 私が使用できる他の戦術を知っている場合は、お気軽にコメントしてください
- どんなアドバイスでも大歓迎です。
サンプル画像:
望ましい結果 (ペイントで変更):
これまでに試した作業で投稿に更新を追加する
元のコードにいくつかの変更を加えたので、以下に投稿します。コメント内のすべては、デバッグまたは説明用です。あなたの助けは大歓迎です! 介入することを恐れないでください。
以下は私が得た結果です。それは私が望んでいたものではありませんが、正しい軌道に乗っているように感じます. ストリップ内のピクセル位置を見つけて、それを全体像のピクセル位置に相対的にするために、実際にいくつかの助けを借りることができました。
この種の別の画像は、より良い品質ですが、より多くの問題を争いにもたらします。
python - OpenCV の HoughLines は、検出された行を [rho,theta] マトリックスにどのような順序でリストしますか?
線を含む特定の画像が OpenCV の HoughLine 変換に渡されると、rho と theta のペアのリストが返されます。各ペアは個々の線を定義します。この rho,theta ペアのリストにリストされている行の順序は何ですか?
たとえば、この8行の 画像をpythonで使用した場合、8行の画像
次のように、8 行分の rho,theta 行列が返されました。
このマトリックスにリストされている行の順序は、openCV によってどのように決定されますか?
python - Python で OpenCv を使用してほぼ直線を検出する
OpenCv を使用して画像内の直線を検出しています。以下はコードです:
画像(PDFのスクリーンショット)Image.jpg(下)の場合、結果としてresult.png(下)を取得していますが、これはまさに私が望む出力です。
しかし、以下の Image Test.jpgを入力として与えると、アルゴリズムが正しく機能しません。次のエラーが発生しています。
Test.jpgでは水平線がまっすぐではないため (電話のカメラでこれをクリックしたため)、またminLineLength値を100に変更すると、上記のエラーは表示されず、それぞれに不完全な色あせた線が表示されるためだと思います行。アルゴリズムを正しく機能させるには、アルゴリズムでどのパラメーターを変更する必要があるか教えてください。