当我尝试将一个向量元素的值分配给另一个向量元素时,为什么我的应用程序会崩溃



我是C 的新手。我试图找到自己的形状顶点,并在它们周围绘制圆圈。我在这条主要功能的行中绘制圆圈:

drawVertices(getDrawingVertices(getAllPoints()), src_clone);

我认为我的drawVertices()功能都可以:

void drawVertices(vector<Point> drawingVertices, Mat src_clone) {
    for( int i = 0; i < drawingVertices.size(); i++ ){
        circle(src_clone, drawingVertices[i], 5, Scalar(255), 3, 8);
    }
}

,但使用getDrawingVertices()函数并非一切顺利。当我尝试将一个向量元素的值分配给另一个向量元素时,我的应用程序会崩溃:

drawingVertices[i] = pointsArray[topLength];

完整的功能代码getDrawingVertices()在这里:

vector<Point> getDrawingVertices (vector<Point> pointsArray) {
       int N = pointsArray.size();
       int numberOfDrawingVertices = 8;
       vector<Point> drawingVertices(numberOfDrawingVertices);
       vector<int> lengthArray(N);
       Point centerPoint = findCenter();
   for (int i = 0; i < N; i++) {
        lengthArray[i] = floor(pow((pow((pointsArray[i].x - centerPoint.x),2) + 
        pow((pointsArray[i].y - centerPoint.y),2)),0.5));
   }
   for (int i = 0; i < 8; i++) {
        int topLength = 0;
        for (int j = 0; j < N; j++) {
            if (lengthArray[j] > lengthArray[topLength]) {
                topLength = j;
            }
        }
        drawingVertices[i] = pointsArray[topLength];
        lengthArray[topLength] = 0;
   }
   return drawingVertices;
}

这是函数守则getAllPoints ()

vector<Point> getAllPoints () {
    vector<Point> pointsArray;
        for( int i = 0; i < contours.size(); i++ ){
            for (int j = 0; j < contours[i].size(); j++) {
                pointsArray.push_back(contours[i][j]);
            }
    }
    return pointsArray;
}

编辑

功能findCenter()

 Point findCenter() {
    vector<Moments> mu(contours.size() );
    for( int i = 0; i < contours.size(); i++ ){
        mu[i] = moments( contours[i], false );
    }
    vector<Point2f> mc( contours.size() );
    for( int i = 0; i < contours.size(); i++ ) {
        mc[i] = Point2f( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 );
    }
    int SumX = 0;
    int SumY = 0;
    int pointCol = 0;
    for(int j= 0; j < mc.size();j++) {
       SumX += mc[j].x;
       SumY += mc[j].y;
       pointCol++;
    }
    Point centerPoint;
    centerPoint.x = floor(SumX/pointCol);
    centerPoint.y = floor(SumY/pointCol);
    return centerPoint;
}

我有错误的地方?

您应该自己调试代码。

如果您的应用在此行崩溃

drawingVertices[i] = pointsArray[topLength];

您应该检查drawingVerticespointsArray的长度,以及itopLength。检查i>=0i<drawingVertices.size(),以及pointsArraytopLength的相同。如果其中一种条件不遵守,请检查何时以及如何错误。

(在旁注上,而不是POW(x,0.5(使用SQRT(X(。但是它没有连接到您的问题。(