[最後の質問を更新] 640x480画像で単純な幾何学的形状のデザインパターンを検出しようとしています。私は32x32ブロックで画像を分割し、それぞれの形状の中心がどのブロックにあるかを調べました。PythonでOpenCVを使って画像内の線を検出する
この計算に基づいて、私は、形状が発見されるたびに col=640/4 row=480/4
と、中心が計算されると、それが発見されたブロックチェックする(160×120)のゼロ(のfloat32)のnumpyの行列を作成しました。対応するアイテムは、160x120のnumpy配列のその8つの近隣とともに、に設定されます。最終的に、160×120のnumpy配列は、黒い背景のグレースケール画像として検出され、検出された形状のブロックを表す白いピクセルとして表されます。
左上の画像は、160x120のnumpyの配列を表します。これまでのところ問題ありません。
新しく生成された画像には、黒い前景に白い線が表示されています。私はこの行のrho、theta、x0、y0、x1、y1を見つけたいと思います。だから私はこれにHoughLines変換を使うことにしました。以下のように
については、次のとおり
edges = cv2.Canny(np.uint8(g_quadrants), 50, 150, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
print lines
ここg_quadrants
cv2.HoughLines
のグレースケール画像が、出力を表す160×120マトリックスはNone
以外のものが含まれていませんです。
私にこれを手伝ってください。
更新:
小さなウィンドウ白を表示(グレースケールを考慮np.float32)黒と白のイメージはときに私
- 除算私が実際に得るものであると32x32ブロック内の640x480
- 画像の三角形を検索
- 三角形がブロック内
ズームさ見つかった場合、各ブロックの結果
直線を形成する白い画素があることがわかります。いくつかの望ましくない検出される可能性があります。私は、不要な孤立したピクセルを除去し、連続した直線を再構築する必要があります。これは、画像を膨張させ、次いで腐食させることによって達成され得る。この行のx0、y0、x1、y1、rho、thetaを見つける必要があります。
複数の行にすることができます。その場合、私は長さに関して上位2行を見つける必要があります。
によってフィルタリングあなたは既に結果が良好なラインを持っていないのですか?あなたはこれを解決するためにハフ変換をする必要はありません。実際には単純な線形回帰を使って、線分をy = mx + b(線分を作成するためにopencvフィットラインを使用することができます) –
の線分を再構成することができます。例えば。メインラインから遠くに検出された三角形。あるいは、私は異なる方向に複数の線を持つかもしれません。 –
@Silencer左上の小さな画像に '' '' '' '' '' '' '' '' 'を' '適用する必要があります。イメージは、実際には、** 0 **と** 1 **の値を含む160x120の '' 'float32'''要素の行列です。したがって、グレースケール画像と見なすことができます。私はそのイメージに現れるすべての線を見つける必要があります。私はCanny Edgeの検出に続いてHoughLinesを適用しましたが、結果として得られたラインのリストは空です。 –