[解決済み] OpenCV houghLinesP パラメータ
質問内容
PythonのOpenCVでHoughLinesPを使って、この画像のチェス盤上の線を見つけるのに苦労しています。
HoughLinesPのパラメータを理解するために、以下のコードを思いつきました。
import numpy as np
import cv2
from matplotlib import pyplot as plt
from matplotlib import image as image
I = image.imread('chess.jpg')
G = cv2.cvtColor(I, cv2.COLOR_BGR2GRAY)
# Canny Edge Detection:
Threshold1 = 150;
Threshold2 = 350;
FilterSize = 5
E = cv2.Canny(G, Threshold1, Threshold2, FilterSize)
Rres = 1
Thetares = 1*np.pi/180
Threshold = 1
minLineLength = 1
maxLineGap = 100
lines = cv2.HoughLinesP(E,Rres,Thetares,Threshold,minLineLength,maxLineGap)
N = lines.shape[0]
for i in range(N):
x1 = lines[i][0][0]
y1 = lines[i][0][1]
x2 = lines[i][0][2]
y2 = lines[i][0][3]
cv2.line(I,(x1,y1),(x2,y2),(255,0,0),2)
plt.figure(),plt.imshow(I),plt.title('Hough Lines'),plt.axis('off')
plt.show()
私が抱えている問題は、これが1行しか拾わないということです。maxLineGapを1に減らすと、数千行をピックアップします。
この理由は理解できますが、これらすべての共線がマージされるようにするには、どのように適切なパラメータセットを選択すればよいのでしょうか?何か見落としているのでしょうか?
この関数の動作例として使うので、コードはシンプルにしたいのですが。
よろしくお願いします。
更新:これはHoughLinesで完全に動作します。
また、Cannyが正常に動作しているので、エッジ検出の問題はないようです。
しかし、私はまだHoughLinesPを動作させる必要があります。何かいいアイデアはないでしょうか?
画像はこちら 結果
解決方法
OK、やっと問題を見つけたので、この問題で頭がおかしくなった人のために解決策を共有しようと思います。問題は、HoughLinesP関数の中に、"ines"という追加のパラメータがあり、関数の出力が同じであるため、冗長になっていることです。
cv2.HoughLinesP(image, rho, theta, threshold[, ライン [, minLineLength[, maxLineGap]]])
これでは、パラメータを読み込む順番を間違えてしまい、問題が発生します。パラメータの順番の混乱を避けるために、最も簡単な解決策は、関数内で次のようにパラメータを指定することです。
lines = cv2.HoughLinesP(E,rho = 1,theta = 1*np.pi/180,threshold = 100,minLineLength = 100,maxLineGap = 50)
これは私の問題を完全に解決し、他の人の助けになることを願っています。
関連
-
pythonを使ったオフィス自動化コード例
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python百行で韓服サークルの画像クロールを実現する
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
PythonによるExcelファイルの一括操作の説明
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない