2

境界ボックスの中心点を結ぶ線を描画しようとしています。中心がフレームからフレームに移動すると、点はベクトルに格納されます。

現在、CvLine を使用してこれらの点を線で結び付けようとしています。私はThis Opencv Documentationに従っています。しかし、CvLine 関数は、私が与えたパラメーターに満足していません。

コードは次のとおりです。

vector<Point> Rightarm(20);


vector<Point> Leftarm(20);

    vector<Point>::const_iterator RightIter;
    vector<Point>::const_iterator LeftIter;



   Point center = Point(oko[0].x + (oko[0].width/2), oko[0].y + (oko[0].height/2));
    cout<<"Center Point of Box: 0 is: " <<center<<endl;

    double area = (oko[0].width * oko[0].height);
    cout<<"The Area of Box: 0 is: " <<area<<endl;

    Point center1 = Point(oko[1].x + (oko[1].width/2), oko[1].y + (oko[1].height/2));
    cout<<"Center Point of Box: 1 is: " <<center1<<endl;

    double area1 = (oko[1].width * oko[1].height);
    cout<<"The Area of Box: 1 is: " <<area1<<endl;



Rightarm.push_back(center);
    Leftarm.push_back(center1); 

    if(oko[0].x > oko[1].x)
    {

    }
        else
        {

        }


    for(RightIter = Rightarm.begin(); RightIter != Rightarm.end(); ++RightIter)
    {
        circle(drawing, *RightIter, 3, Scalar(0,0,255), CV_FILLED); 
    }

    if(Rightarm.size() == 20)
        {
            Rightarm.clear();

        }

    for(LeftIter = Leftarm.begin(); LeftIter != Leftarm.end(); ++LeftIter)
    {
        circle(drawing, *LeftIter, 3, Scalar(0,255,0), CV_FILLED);
    }

        if(Rightarm.size() == 20)
        {
            Leftarm.clear();

        }

    cvLine(drawing, center.x, center.y, Scalar(255,255,255),1 ,8 ,CV_AA);

    imshow(window_Input, frame);
    imshow(window_Output, drawing);

これでどこが間違っているのか誰にもわかりますか...?

4

3 に答える 3

2

行関数に間違った引数と 1 つの余分な引数を与えています。あなたが指摘したドキュメントはPythonインターフェース用であり、それも古いものを使用していcvます。最新バージョンの OpenCV を使用していると仮定すると、新しい C++ インターフェイスまたはcv2Python のインターフェイスを使用する方が適切です。

次のようなライン関数を使用する必要があります

cvLine(
img,       // image to draw on
center,    // starting end point of line segment of type cv::Point
center1,   // other end of line segment
Scalar(0, 255, 0), //green colour
1         // thickness of line
CV_AA     // anti aliased line type
);

ドキュメントはこちら

于 2013-03-29T12:24:28.830 に答える
2

多分このように:

struct centerpoint {
  int x;
  int y;
} center1,center2;

(...) //Define values for centers.

cvLine( drawing, 
        cvPoint(center1.x, center1.y),
        cvPoint(center2.x, center2.y),
        Scalar(255,255,255), 1, 8 , CV_AA);

気に入ったすべての回答に投票し、有効な回答を受け入れることを忘れないでください。

于 2013-03-29T12:38:32.960 に答える
0

cvLine は 2 点間に線を描画します。2 つの cv::Point を指定する必要がありますが、center.x と center.y は指定しないでください。

于 2013-03-28T06:05:46.863 に答える