5

CvSeq * circles = cvHoughCircles()である円検出プログラムの正方形検出プログラミングに使用できる「cvHoughCircles()」のようなopencv関数はありますが、正方形検出を見つけることができませんでした。

4

2 に答える 2

8

そのための個別の関数は必要ありません。OpenCVには正方形の検出サンプルが付属しています(実際には長方形を検出します。正方形を取得するには、すべての辺の長さが等しくなければならないという制約を追加できます)。

このリンクを確認してください:squares.cpp

このSOFでこのコードがどのように機能するかについての良い説明があります:javacvを使用して可変の長さと幅を持つ正方形または長方形を識別する方法は?

以下は、そのコードを適用したときに得られる結果です。

ここに画像の説明を入力してください

于 2012-06-13T14:11:23.040 に答える
5

正方形を直接見つけるための opencv 関数はありません。

ただし、線を検出する houghLines 関数を使用して、角度が 90 度の線の交点を見つけることができます。

線間の角度を測定するために、Java コード スニペットを提供できます。

// returns cosine of angle between line segments 0 to 1, and 0 to 2.
// pt0 is the vertex / intersection
// angle of 90 degrees will have a cosine == 0

public static final double angleCosine(Point pt1, Point pt0, Point pt2) {
    double dx1 = pt1.x - pt0.x;
    double dy1 = pt1.y - pt0.y;
    double dx2 = pt2.x - pt0.x;
    double dy2 = pt2.y - pt0.y;
    return (dx1 * dx2 + dy1 * dy2) / Math.sqrt((dx1 * dx1 + dy1 * dy1) * (dx2 * dx2 + dy2 * dy2) + 1e-10);
}

houghLines に関するドキュメント:

http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=houghlines#houghlines

于 2012-06-13T13:33:02.830 に答える